Maven plugin to check dependency versions 21/9221/3
authorGary Wu <gary.i.wu@huawei.com>
Tue, 29 Aug 2017 21:21:06 +0000 (14:21 -0700)
committerGary Wu <gary.i.wu@huawei.com>
Tue, 29 Aug 2017 21:31:22 +0000 (14:31 -0700)
Initial draft of a custom maven plugin to check
dependency versions against the version manifest.

Change-Id: If009461f6ecbcd86e5a43004a1c5a421ec02ccca
Issue-id: INT-124
Signed-off-by: Gary Wu <gary.i.wu@huawei.com>
oparent/pom.xml
pom.xml
version-check-maven-plugin/pom.xml [new file with mode: 0644]
version-check-maven-plugin/src/main/java/org/onap/oparent/versioncheck/VersionCheckMojo.java [new file with mode: 0644]

index 9cde98f..09c1d35 100644 (file)
     <sonar.exclusions>**/gen/**,**/generated-sources/**,**/yang-gen**,**/pax/**</sonar.exclusions>
     <!-- If following file exist, auto-generation of swagger.json will be done -->
     <swagger-properties>${basedir}/src/main/resources/swagger.properties</swagger-properties>
-
     <!-- If following file exist, auto-generation of sdk will be done -->
     <swagger-json>${basedir}/src/main/resources/swagger.json</swagger-json>
   </properties>
-
+  <dependencies>
+    <dependency>
+      <groupId>org.onap.oparent</groupId>
+      <artifactId>version-check-maven-plugin</artifactId>
+      <version>1.0.0-SNAPSHOT</version>
+    </dependency>
+  </dependencies>
   <profiles>
-        <profile>
-            <id>generate-json</id>
-            <activation>
-                <file>
-                    <exists>${swagger-properties}</exists>
-                </file>
-                <property>
-                    <name>swagger-sdk.generate-json</name>
-                </property>
-            </activation>
-            <build>
-                <plugins>
-                    <plugin>
-                        <groupId>org.codehaus.mojo</groupId>
-                        <artifactId>properties-maven-plugin</artifactId>
-                        <version>1.0.0</version>
-                          <executions>
-                              <execution>
-                                <phase>initialize</phase>
-                                <goals>
-                                  <goal>read-project-properties</goal>
-                                </goals>
-                                <configuration>
-                                  <files>
-                                    <file>${basedir}/src/main/resources/swagger.properties</file>
-                                  </files>
-                                </configuration>
-                              </execution>
-                        </executions>
-                    </plugin>
-                    <plugin>
-                        <groupId>com.github.kongchen</groupId>
-                        <artifactId>swagger-maven-plugin</artifactId>
-                        <version>3.1.4</version>
-                        <configuration>
-                            <apiSources>
-                              <apiSource>
-                                    <locations>${api-rest-package}</locations>
-                                    <schemes>http,https</schemes>
-                                    <host>${api-host-ip}:${api-host-port}</host>
-                                    <basePath>${api-base-path}</basePath>
-                                    <info>
-                                        <title>${api-title}</title>
-                                        <version>${api-version}</version>
-                                        <description>${api-description}</description>
-                                        <license>
-                                            <name>${api-license}</name>
-                                        </license>
-                                    </info>
-                                    <swaggerDirectory>${basedir}/src/main/resources</swaggerDirectory>
-                                </apiSource>
-                            </apiSources>
-                        </configuration>
-                        <executions>
-                            <execution>
-                                <phase>compile</phase>
-                                <goals>
-                                    <goal>generate</goal>
-                                </goals>
-                            </execution>
-                        </executions>
-                    </plugin>
-                    <plugin>
-                        <groupId>org.apache.maven.plugins</groupId>
-                        <artifactId>maven-install-plugin</artifactId>
-                        <version>2.3.1</version>
-                        <executions>
-                            <execution>
-                                <id>install-file-id</id>
-                                <phase>install</phase>
-                                <goals>
-                                    <goal>install-file</goal>
-                                </goals>
-                                <configuration>
-                                    <file>${basedir}/src/main/resources/swagger.json</file>
-                                    <groupId>${project.groupId}</groupId>
-                                    <artifactId>${project.artifactId}-swagger-schema</artifactId>
-                                    <version>${project.version}</version>
-                                    <packaging>json</packaging>
-                                </configuration>
-                            </execution>
-                        </executions>
-                    </plugin>
-              </plugins>
-            </build>
-        </profile>
-        <profile>
-            <id>generate-sdk</id>
-            <activation>
-                <file>
-                    <exists>${swagger-json}</exists>
-                </file>
-                <property>
-                    <name>swagger-sdk.generate-java-sdk</name>
-                </property>
-            </activation>
-            <build>
-                <plugins>
-                    <plugin>
-                        <groupId>org.apache.maven.plugins</groupId>
-                        <artifactId>maven-antrun-plugin</artifactId>
-                        <version>1.8</version>
-                        <executions>
-                          <execution>
-                            <phase>initialize</phase>
-                            <id>ant-create-script</id>
-                            <configuration>
-                                <exportAntProperties>true</exportAntProperties>
-                                <tasks>
-
-                                    <taskdef resource="net/sf/antcontrib/antlib.xml" classpathref="maven.plugin.classpath" />
-                                    <condition property="is_windows" value="true">
-                                                <os family="windows"/>
-                                    </condition>
-                                    <condition property="isLinux" value="true">
-                                            <os family="unix" />
-                                    </condition>
-                                    <if>
-                                      <equals arg1="${is_windows}" arg2="true" />
-                                      <then>
-                                            <property name="swagger.sdk.script.file" value="generated-source-script.bat"/>
-                                            <echo file="${project.build.directory}${file.separator}generated-source-script.bat"
-                                             append="true" message="cd ${project.build.directory}${file.separator}generated-sources${line.separator}" />
-                                            <echo file="${project.build.directory}${file.separator}generated-source-script.bat"
-                                            append="true" message="mvn clean install -Dmaven.test.skip=true${line.separator}" />
-                                      </then>
-                                      <else>
-                                            <property name="swagger.sdk.script.file" value="generated-source-script.sh"/>
-                                              <echo file="${project.build.directory}${file.separator}generated-source-script.sh"
-                                              append="true" message="cd ${project.build.directory}${file.separator}generated-sources${line.separator}" />
-                                            <echo file="${project.build.directory}${file.separator}generated-source-script.sh"
-                                            append="true" message="mvn clean install -Dmaven.test.skip=true${line.separator}" />
-                                            <chmod file="${project.build.directory}${file.separator}generated-source-script.sh" perm="755"/>
-                                      </else>
-                                    </if>
-                                </tasks>
-                            </configuration>
-                            <goals>
-                              <goal>run</goal>
-                            </goals>
-                          </execution>
-                        </executions>
-                        <dependencies>
-                        <dependency>
-                                    <groupId>ant-contrib</groupId>
-                                    <artifactId>ant-contrib</artifactId>
-                                    <version>1.0b3</version>
-                                    <exclusions>
-                                      <exclusion>
-                                        <artifactId>ant</artifactId>
-                                        <groupId>ant</groupId>
-                                      </exclusion>
-                                    </exclusions>
-                                  </dependency>
-                        </dependencies>
-                    </plugin>
-                    <plugin>
-                        <groupId>io.swagger</groupId>
-                        <artifactId>swagger-codegen-maven-plugin</artifactId>
-                        <version>2.2.1</version>
-                        <executions>
-                            <execution>
-                                <goals>
-                                    <goal>generate</goal>
-                                </goals>
-                                <configuration>
-                                    <inputSpec>${basedir}/src/main/resources/swagger.json</inputSpec>
-                                    <output>${project.build.directory}/generated-sources</output>
-                                    <language>java</language>
-                                    <configOptions>
-                                       <dateLibrary>joda</dateLibrary>
-                                    </configOptions>
-                                    <library>jersey2</library>
-                                    <groupId>${project.groupId}</groupId>
-                                    <artifactId>${project.artifactId}-java-sdk</artifactId>
-                                    <artifactVersion>${project.version}</artifactVersion>
-                                    <modelPackage>${project.groupId}.${project.artifactId}.client.model</modelPackage>
-                                    <apiPackage>${project.groupId}.${project.artifactId}.client.api</apiPackage>
-                                    <invokerPackage>${project.groupId}.${project.artifactId}.client.invoker</invokerPackage>
-                                </configuration>
-                            </execution>
-                        </executions>
-                    </plugin>
-                    <plugin>
-                      <artifactId>exec-maven-plugin</artifactId>
-                      <groupId>org.codehaus.mojo</groupId>
-                      <version>1.5.0</version>
-                      <executions>
-                        <execution>
-                          <id>swagger-generate-sources</id>
-                          <phase>generate-sources</phase>
-                          <goals>
-                            <goal>exec</goal>
-                          </goals>
-                          <configuration>
-                            <executable>${project.build.directory}${file.separator}${swagger.sdk.script.file}</executable>
-                          </configuration>
-                        </execution>
-                      </executions>
-                    </plugin>
-                    <plugin>
-                        <groupId>org.apache.maven.plugins</groupId>
-                        <artifactId>maven-clean-plugin</artifactId>
-                        <version>3.0.0</version>
-                        <executions>
-                            <execution>
-                                <id>clean-generated-files</id>
-                                <phase>generate-sources</phase>
-                                <goals>
-                                    <goal>clean</goal>
-                                </goals>
-                                <configuration>
-                                    <filesets>
-                                        <fileset>
-                                            <directory>${project.build.directory}/generated-sources</directory>
-                                        </fileset>
-                                    </filesets>
-                                </configuration>
-                            </execution>
-                        </executions>
-                    </plugin>
-              </plugins>
-            </build>
+    <profile>
+      <id>generate-json</id>
+      <activation>
+        <file>
+          <exists>${swagger-properties}</exists>
+        </file>
+        <property>
+          <name>swagger-sdk.generate-json</name>
+        </property>
+      </activation>
+      <build>
+        <plugins>
+          <plugin>
+            <groupId>org.codehaus.mojo</groupId>
+            <artifactId>properties-maven-plugin</artifactId>
+            <version>1.0.0</version>
+            <executions>
+              <execution>
+                <phase>initialize</phase>
+                <goals>
+                  <goal>read-project-properties</goal>
+                </goals>
+                <configuration>
+                  <files>
+                    <file>${basedir}/src/main/resources/swagger.properties</file>
+                  </files>
+                </configuration>
+              </execution>
+            </executions>
+          </plugin>
+          <plugin>
+            <groupId>com.github.kongchen</groupId>
+            <artifactId>swagger-maven-plugin</artifactId>
+            <version>3.1.4</version>
+            <configuration>
+              <apiSources>
+                <apiSource>
+                  <locations>${api-rest-package}</locations>
+                  <schemes>http,https</schemes>
+                  <host>${api-host-ip}:${api-host-port}</host>
+                  <basePath>${api-base-path}</basePath>
+                  <info>
+                    <title>${api-title}</title>
+                    <version>${api-version}</version>
+                    <description>${api-description}</description>
+                    <license>
+                      <name>${api-license}</name>
+                    </license>
+                  </info>
+                  <swaggerDirectory>${basedir}/src/main/resources</swaggerDirectory>
+                </apiSource>
+              </apiSources>
+            </configuration>
+            <executions>
+              <execution>
+                <phase>compile</phase>
+                <goals>
+                  <goal>generate</goal>
+                </goals>
+              </execution>
+            </executions>
+          </plugin>
+          <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-install-plugin</artifactId>
+            <version>2.3.1</version>
+            <executions>
+              <execution>
+                <id>install-file-id</id>
+                <phase>install</phase>
+                <goals>
+                  <goal>install-file</goal>
+                </goals>
+                <configuration>
+                  <file>${basedir}/src/main/resources/swagger.json</file>
+                  <groupId>${project.groupId}</groupId>
+                  <artifactId>${project.artifactId}-swagger-schema</artifactId>
+                  <version>${project.version}</version>
+                  <packaging>json</packaging>
+                </configuration>
+              </execution>
+            </executions>
+          </plugin>
+        </plugins>
+      </build>
+    </profile>
+    <profile>
+      <id>generate-sdk</id>
+      <activation>
+        <file>
+          <exists>${swagger-json}</exists>
+        </file>
+        <property>
+          <name>swagger-sdk.generate-java-sdk</name>
+        </property>
+      </activation>
+      <build>
+        <plugins>
+          <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-antrun-plugin</artifactId>
+            <version>1.8</version>
+            <executions>
+              <execution>
+                <phase>initialize</phase>
+                <id>ant-create-script</id>
+                <configuration>
+                  <exportAntProperties>true</exportAntProperties>
+                  <tasks>
+                    <taskdef resource="net/sf/antcontrib/antlib.xml" classpathref="maven.plugin.classpath"/>
+                    <condition property="is_windows" value="true">
+                      <os family="windows"/>
+                    </condition>
+                    <condition property="isLinux" value="true">
+                      <os family="unix"/>
+                    </condition>
+                    <if>
+                      <equals arg1="${is_windows}" arg2="true"/>
+                      <then>
+                        <property name="swagger.sdk.script.file" value="generated-source-script.bat"/>
+                        <echo file="${project.build.directory}${file.separator}generated-source-script.bat" append="true" message="cd ${project.build.directory}${file.separator}generated-sources${line.separator}"/>
+                        <echo file="${project.build.directory}${file.separator}generated-source-script.bat" append="true" message="mvn clean install -Dmaven.test.skip=true${line.separator}"/>
+                      </then>
+                      <else>
+                        <property name="swagger.sdk.script.file" value="generated-source-script.sh"/>
+                        <echo file="${project.build.directory}${file.separator}generated-source-script.sh" append="true" message="cd ${project.build.directory}${file.separator}generated-sources${line.separator}"/>
+                        <echo file="${project.build.directory}${file.separator}generated-source-script.sh" append="true" message="mvn clean install -Dmaven.test.skip=true${line.separator}"/>
+                        <chmod file="${project.build.directory}${file.separator}generated-source-script.sh" perm="755"/>
+                      </else>
+                    </if>
+                  </tasks>
+                </configuration>
+                <goals>
+                  <goal>run</goal>
+                </goals>
+              </execution>
+            </executions>
             <dependencies>
-                <dependency>
-                    <groupId>org.onap.msb.swagger-sdk</groupId>
-                    <artifactId>swagger-sdk</artifactId>
-                    <version>1.0.0-SNAPSHOT</version>
-                </dependency>
+              <dependency>
+                <groupId>ant-contrib</groupId>
+                <artifactId>ant-contrib</artifactId>
+                <version>1.0b3</version>
+                <exclusions>
+                  <exclusion>
+                    <artifactId>ant</artifactId>
+                    <groupId>ant</groupId>
+                  </exclusion>
+                </exclusions>
+              </dependency>
             </dependencies>
-        </profile>
-    </profiles>
+          </plugin>
+          <plugin>
+            <groupId>io.swagger</groupId>
+            <artifactId>swagger-codegen-maven-plugin</artifactId>
+            <version>2.2.1</version>
+            <executions>
+              <execution>
+                <goals>
+                  <goal>generate</goal>
+                </goals>
+                <configuration>
+                  <inputSpec>${basedir}/src/main/resources/swagger.json</inputSpec>
+                  <output>${project.build.directory}/generated-sources</output>
+                  <language>java</language>
+                  <configOptions>
+                    <dateLibrary>joda</dateLibrary>
+                  </configOptions>
+                  <library>jersey2</library>
+                  <groupId>${project.groupId}</groupId>
+                  <artifactId>${project.artifactId}-java-sdk</artifactId>
+                  <artifactVersion>${project.version}</artifactVersion>
+                  <modelPackage>${project.groupId}.${project.artifactId}.client.model</modelPackage>
+                  <apiPackage>${project.groupId}.${project.artifactId}.client.api</apiPackage>
+                  <invokerPackage>${project.groupId}.${project.artifactId}.client.invoker</invokerPackage>
+                </configuration>
+              </execution>
+            </executions>
+          </plugin>
+          <plugin>
+            <artifactId>exec-maven-plugin</artifactId>
+            <groupId>org.codehaus.mojo</groupId>
+            <version>1.5.0</version>
+            <executions>
+              <execution>
+                <id>swagger-generate-sources</id>
+                <phase>generate-sources</phase>
+                <goals>
+                  <goal>exec</goal>
+                </goals>
+                <configuration>
+                  <executable>${project.build.directory}${file.separator}${swagger.sdk.script.file}</executable>
+                </configuration>
+              </execution>
+            </executions>
+          </plugin>
+          <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-clean-plugin</artifactId>
+            <version>3.0.0</version>
+            <executions>
+              <execution>
+                <id>clean-generated-files</id>
+                <phase>generate-sources</phase>
+                <goals>
+                  <goal>clean</goal>
+                </goals>
+                <configuration>
+                  <filesets>
+                    <fileset>
+                      <directory>${project.build.directory}/generated-sources</directory>
+                    </fileset>
+                  </filesets>
+                </configuration>
+              </execution>
+            </executions>
+          </plugin>
+        </plugins>
+      </build>
+      <dependencies>
+        <dependency>
+          <groupId>org.onap.msb.swagger-sdk</groupId>
+          <artifactId>swagger-sdk</artifactId>
+          <version>1.0.0-SNAPSHOT</version>
+        </dependency>
+      </dependencies>
+    </profile>
+  </profiles>
   <build>
     <pluginManagement>
       <plugins>
               </goals>
               <phase>process-sources</phase>
               <configuration>
-               <!-- Use Google Java Style Guide:
+                <!-- Use Google Java Style Guide:
                      https://github.com/checkstyle/checkstyle/blob/master/src/main/resources/google_checks.xml
                      with minor changes -->
-               <configLocation>onap-checkstyle/onap-java-style.xml</configLocation>
-               <!-- <sourceDirectory> is needed so that checkstyle ignores the generated sources directory -->
-               <sourceDirectory>${project.build.sourceDirectory}/src/main/java</sourceDirectory>
-               <includeResources>true</includeResources>
-               <includeTestSourceDirectory>true</includeTestSourceDirectory>
-               <includeTestResources>true</includeTestResources>
-               <excludes>
+                <configLocation>onap-checkstyle/onap-java-style.xml</configLocation>
+                <!-- <sourceDirectory> is needed so that checkstyle ignores the generated sources directory -->
+                <sourceDirectory>${project.build.sourceDirectory}/src/main/java</sourceDirectory>
+                <includeResources>true</includeResources>
+                <includeTestSourceDirectory>true</includeTestSourceDirectory>
+                <includeTestResources>true</includeTestResources>
+                <excludes>
                </excludes>
-               <failsOnError>false</failsOnError>
-               <consoleOutput>true</consoleOutput>
+                <failsOnError>false</failsOnError>
+                <consoleOutput>true</consoleOutput>
               </configuration>
             </execution>
           </executions>
             </execution>
           </executions>
         </plugin>
-    <!-- https://mvnrepository.com/artifact/org.sonarsource.scanner.maven/sonar-maven-plugin -->
-    <plugin>
-      <groupId>org.sonarsource.scanner.maven</groupId>
-      <artifactId>sonar-maven-plugin</artifactId>
-      <version>3.3.0.603</version>
-    </plugin>
+        <!-- https://mvnrepository.com/artifact/org.sonarsource.scanner.maven/sonar-maven-plugin -->
+        <plugin>
+          <groupId>org.sonarsource.scanner.maven</groupId>
+          <artifactId>sonar-maven-plugin</artifactId>
+          <version>3.3.0.603</version>
+        </plugin>
+        <plugin>
+          <groupId>org.onap.oparent</groupId>
+          <artifactId>version-check-maven-plugin</artifactId>
+          <version>1.0.0-SNAPSHOT</version>
+          <executions>
+            <execution>
+              <id>version-check</id>
+              <phase>compile</phase>
+              <goals>
+                <goal>version-check</goal>
+              </goals>
+              <configuration>
+                <manifestUri>https://git.onap.org/oparent/plain/versions/src/main/resources/onap-versions/onap-version-manifest.csv</manifestUri>
+              </configuration>
+            </execution>
+          </executions>
+        </plugin>
       </plugins>
     </pluginManagement>
     <plugins>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-failsafe-plugin</artifactId>
       </plugin>
+      <plugin>
+        <groupId>org.onap.oparent</groupId>
+        <artifactId>version-check-maven-plugin</artifactId>
+      </plugin>
     </plugins>
   </build>
 </project>
diff --git a/pom.xml b/pom.xml
index 7ac034e..1bd4a4f 100644 (file)
--- a/pom.xml
+++ b/pom.xml
@@ -27,6 +27,7 @@
     <module>checkstyle</module>
     <module>license</module>
     <module>oparent</module>
+    <module>version-check-maven-plugin</module>
   </modules>
   <properties>
     <maven.compiler.source>1.8</maven.compiler.source>
diff --git a/version-check-maven-plugin/pom.xml b/version-check-maven-plugin/pom.xml
new file mode 100644 (file)
index 0000000..57f905b
--- /dev/null
@@ -0,0 +1,74 @@
+<?xml version="1.0"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.onap.oparent</groupId>
+    <artifactId>version</artifactId>
+    <version>1.0.0-SNAPSHOT</version>
+    <relativePath>..</relativePath>
+  </parent>
+  <artifactId>version-check-maven-plugin</artifactId>
+  <packaging>maven-plugin</packaging>
+  <name>version-check-maven-plugin Maven Plugin</name>
+  <url>https://www.onap.org</url>
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    <mavenVersion>3.2.3</mavenVersion>
+  </properties>
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.maven</groupId>
+      <artifactId>maven-plugin-api</artifactId>
+      <version>2.0</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven.plugin-tools</groupId>
+      <artifactId>maven-plugin-annotations</artifactId>
+      <version>3.2</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.codehaus.plexus</groupId>
+      <artifactId>plexus-utils</artifactId>
+      <version>3.0.8</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven</groupId>
+      <artifactId>maven-core</artifactId>
+      <version>${mavenVersion}</version>
+    </dependency>
+    <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-csv -->
+    <dependency>
+      <groupId>org.apache.commons</groupId>
+      <artifactId>commons-csv</artifactId>
+      <version>1.4</version>
+    </dependency>
+  </dependencies>
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-plugin-plugin</artifactId>
+        <version>3.2</version>
+        <configuration>
+          <goalPrefix>version-check</goalPrefix>
+          <skipErrorNoDescriptorsFound>true</skipErrorNoDescriptorsFound>
+        </configuration>
+        <executions>
+          <execution>
+            <id>mojo-descriptor</id>
+            <goals>
+              <goal>descriptor</goal>
+            </goals>
+          </execution>
+          <execution>
+            <id>help-goal</id>
+            <goals>
+              <goal>helpmojo</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+</project>
diff --git a/version-check-maven-plugin/src/main/java/org/onap/oparent/versioncheck/VersionCheckMojo.java b/version-check-maven-plugin/src/main/java/org/onap/oparent/versioncheck/VersionCheckMojo.java
new file mode 100644 (file)
index 0000000..0bb94f2
--- /dev/null
@@ -0,0 +1,121 @@
+/*
+ * Copyright 2017 Huawei Technologies, Ltd. and others.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onap.oparent.versioncheck;
+
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.nio.charset.StandardCharsets;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.TreeSet;
+
+import org.apache.commons.csv.CSVFormat;
+import org.apache.commons.csv.CSVRecord;
+import org.apache.maven.model.Dependency;
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.logging.Log;
+import org.apache.maven.plugins.annotations.LifecyclePhase;
+import org.apache.maven.plugins.annotations.Mojo;
+import org.apache.maven.plugins.annotations.Parameter;
+import org.apache.maven.project.MavenProject;
+
+@Mojo(name = "version-check", defaultPhase = LifecyclePhase.PROCESS_SOURCES)
+public class VersionCheckMojo extends AbstractMojo {
+
+    /**
+     * The Maven Project.
+     *
+     * @since 1.0-alpha-1
+     */
+    @Parameter(defaultValue = "${project}", required = true, readonly = true)
+    protected MavenProject project;
+
+    /**
+     * Location of the file.
+     */
+    @Parameter(property = "manifestUri", required = true)
+    private URI manifestUri;
+
+    public void execute() throws MojoExecutionException {
+        final Log log = getLog();
+
+        log.info("Checking version manifest " + manifestUri);
+
+        Map<String, String> expectedVersions = new HashMap<>();
+
+        try (InputStreamReader in = new InputStreamReader(manifestUri.toURL().openStream(),
+                StandardCharsets.ISO_8859_1)) {
+            Iterable<CSVRecord> records = CSVFormat.DEFAULT.withFirstRecordAsHeader().parse(in);
+            for (CSVRecord record : records) {
+                String groupId = record.get("groupId");
+                String artifactId = record.get("artifactId");
+                String version = record.get("version");
+                log.debug("Expected version: " + groupId + ":" + artifactId + ":" + version);
+                expectedVersions.put(groupId + ":" + artifactId, version);
+            }
+        } catch (MalformedURLException e) {
+            log.error(e);
+            throw new MojoExecutionException(e.getMessage());
+        } catch (IOException e) {
+            log.error(e);
+            throw new MojoExecutionException(e.getMessage());
+        }
+
+        Map<String, String> actualVersions = new HashMap<>();
+        MavenProject parent = project.getParent();
+        if (parent != null) {
+            log.debug("Parent: " + parent);
+            actualVersions.put(parent.getGroupId() + ":" + parent.getArtifactId(), parent.getVersion());
+        } else {
+            log.debug("No parent");
+        }
+
+        for (Dependency dep : project.getDependencies()) {
+            log.debug("Dependency: " + dep.toString());
+            actualVersions.put(dep.getGroupId() + ":" + dep.getArtifactId(), dep.getVersion());
+        }
+
+        Set<String> mismatches = new TreeSet<>();
+        for (Entry<String, String> expected : expectedVersions.entrySet()) {
+            String artifact = expected.getKey();
+            String expectedVersion = expectedVersions.get(artifact);
+            String actualVersion = actualVersions.get(artifact);
+            if (actualVersion != null && !actualVersion.equals(expectedVersion)) {
+                mismatches.add(artifact);
+            }
+        }
+
+        if (mismatches.isEmpty()) {
+            log.debug("No version mismatches found");
+        } else {
+            log.warn("The following dependencies should be updated to match the version manifest:");
+            for (String artifact : mismatches) {
+                String expectedVersion = expectedVersions.get(artifact);
+                String actualVersion = actualVersions.get(artifact);
+                if (actualVersion != null && !actualVersion.equals(expectedVersion)) {
+                    log.warn("  " + artifact + " " + actualVersion + " -> " + expectedVersion);
+                }
+            }
+        }
+
+    }
+}