3rdstage's Wiki
Tag: Source edit
 
(53 intermediate revisions by the same user not shown)
Line 45: Line 45:
 
* [https://support.sonatype.com/hc/en-us/articles/217611787-codehaus-org-Repositories-Should-Be-Removed-From-Your-Nexus-Instance <code>codehaus.org</code> Repositories Should Be Removed From Your Nexus Instance] (September 27, 2016)
 
* [https://support.sonatype.com/hc/en-us/articles/217611787-codehaus-org-Repositories-Should-Be-Removed-From-Your-Nexus-Instance <code>codehaus.org</code> Repositories Should Be Removed From Your Nexus Instance] (September 27, 2016)
   
  +
{| class='wikitable'
* '''Central Repository''' : http://search.maven.org/#browse
 
  +
! Title !! Type !! Repository !! Remarks
* '''Main Repositories''' : http://mvnrepository.com/
 
  +
|-
* '''Java.net'''
 
** snapshots and releases : https://maven.java.net/content/groups/public/
+
| Central Repository || || https://repo1.maven.org/maven2/ ||
  +
|-
** releases only : https://maven.java.net/service/local/staging/deploy/maven2/
 
** snapshots only : https://maven.java.net/content/repositories/snapshots/
+
| Java.net || snapshots and releases || https://maven.java.net/content/groups/public/ ||
  +
|-
** [https://maven2-repository.java.net/ Maven 2 repository for java.net projects]
 
  +
| || releases only || https://maven.java.net/service/local/staging/deploy/maven2/ ||
** [https://java.net/projects/maven2-repository/pages/MigrationAndCleanupRelatedDocumentation Java.net Maven Repository Usage Guide]
 
  +
|-
* '''Apache Maven Repository :
 
  +
| || snapshots only || https://maven.java.net/content/repositories/snapshots/ ||
** search : https://repository.apache.org/
 
  +
|-
** public : https://repository.apache.org/content/groups/public
 
** snapshots : https://repository.apache.org/content/groups/snapshots
+
| Apache Maven Repository || search || https://repository.apache.org/ ||
  +
|-
* '''JBoss Maven Repository'''
 
  +
| || public || https://repository.apache.org/content/groups/public ||
** [https://community.jboss.org/wiki/MavenRepository Maven Repository]
 
  +
|-
** [http://www.jboss.org/community/docs/DOC-11381 JBoss Maven Snapshot Repositories]
 
  +
| || snapshots || https://repository.apache.org/content/groups/snapshots ||
** JBoss Maven repsoitories include hibernate releases and snapshots.
 
  +
|-
* '''Spring IO Maven Repositories'''
 
  +
| JBoss Maven Repository || || https://repository.jboss.org/nexus/content/repositories/
** libs-release : http://repo.spring.io/libs-release
 
  +
| [https://community.jboss.org/wiki/MavenRepository JBoss Maven Repository]
** libs-snapshot : http://repo.spring.io/libs-snapshot
 
  +
|-
** plugins-release : http://repo.spring.io/plugins-release
 
** plugins-snapshot : http://repo.spring.io/plugins-snapshot
+
| Spring IO Maven Repositories || lib-milestone || https://repo.spring.io/libs-milestone ||
  +
|-
* '''Google''' : http://google-maven-repository.googlecode.com/svn/repository/
 
  +
| || libs-release || http://repo.spring.io/libs-release ||
* '''SUN Jars Repository'''
 
  +
|-
** http://maven.apache.org/guides/mini/guide-coping-with-sun-jars.html
 
  +
| || libs-snapshot || http://repo.spring.io/libs-snapshot ||
* Maven Repository of eclipse.org
 
  +
|-
** http://maven.eclipse.org/nexus/
 
  +
| || plugins-release || http://repo.spring.io/plugins-release ||
* '''DocBook Repository'''
 
  +
|-
** http://docbook.sourceforge.net/maven/repository/
 
  +
| || plugins-snapshot || http://repo.spring.io/plugins-snapshot ||
** About configuring pom.xml, refer http://wiki.docbook.org/topic/Maven.
 
  +
|-
  +
| Google || || http://google-maven-repository.googlecode.com/svn/repository/ ||
  +
|-
  +
| SUN Jars Repository || || http://maven.apache.org/guides/mini/guide-coping-with-sun-jars.html ||
  +
|-
  +
| Maven Repository of eclipse.org || || http://maven.eclipse.org/nexus/ ||
  +
|-
  +
| DocBook Repository || || http://docbook.sourceforge.net/maven/repository/ || http://wiki.docbook.org/topic/Maven
  +
|}
  +
  +
* [https://maven2-repository.java.net/ Maven 2 repository for java.net projects]
  +
* [https://java.net/projects/maven2-repository/pages/MigrationAndCleanupRelatedDocumentation Java.net Maven Repository Usage Guide]
   
 
==Maven Plug-ins==
 
==Maven Plug-ins==
   
  +
* [http://maven.apache.org/plugins/ Maven Plugin List]
===Utilities===
 
 
* '''Resource Plugin'''
 
** http://maven.apache.org/plugins/maven-resources-plugin/
 
 
* '''Build Helper Plugin'''
 
** https://www.mojohaus.org/build-helper-maven-plugin/
 
 
* '''Build Number Plugin'''
 
** http://mojo.codehaus.org/buildnumber-maven-plugin/
 
** Designed to get a unique build number for each time you build your project.
 
 
* '''Versions Plugin'''
 
** http://mojo.codehaus.org/versions-maven-plugin/
 
** Manages the versions of artifacts in a project's POM.
 
 
* '''Timestamp Plugin'''
 
** http://code.google.com/p/maven-timestamp-plugin/
 
** Provides formatted timestamps for maven builds.
 
 
* '''Properties Plugin'''
 
** https://www.mojohaus.org/properties-maven-plugin/
 
** Provides goals to read and write properties from and to files.
 
 
* '''Properties Plugin'''
 
** http://site.kuali.org/maven/plugins/properties-maven-plugin/1.3.2/plugin-info.html
 
** Provides goals to read and write properties from files.
 
 
* '''Replacer Plugin'''
 
** http://code.google.com/p/maven-replacer-plugin/
 
** Replace tokens within a file with a given value and fully supports regular expressions.
 
 
* '''Expression Plugin'''
 
** https://github.com/jdcasey/expression-maven-plugin
 
** Allow users to resolve expressions interactively.
 
 
===Source configuration management tools support===
 
   
  +
{| class='wikitable'
* '''SVN Revision Number Plugin'''
 
  +
|-
** http://code.google.com/p/maven-svn-revision-number-plugin/
 
  +
! Category !! Plugin !! Description !! Documentation !! Remarks
** Retrieves the revision number and the status of the Subversion working copy directory and sets project properties that can be used later in the build process.
 
  +
|-
** To work with working copy of SVN 1.7 or higher, you should setup dependencies for this plugin to use svnkit 1.7.0-SNAPSHOT.
 
*** For more : http://code.google.com/p/maven-svn-revision-number-plugin/issues/detail?id=10
+
| Utilities || [http://maven.apache.org/plugins/maven-resources-plugin/ Resource Plugin] || || ||
  +
|-
  +
| || [https://www.mojohaus.org/build-helper-maven-plugin/ Build Helper Plugin] || || ||
  +
|-
  +
| || [http://mojo.codehaus.org/buildnumber-maven-plugin/ Build Number Plugin]
  +
| Designed to get a unique build number for each time you build your project. || ||
  +
|-
  +
| || [http://mojo.codehaus.org/versions-maven-plugin/ Versions Plugin]
  +
| Manages the versions of artifacts in a project's POM. || ||
  +
|-
  +
| || [http://code.google.com/p/maven-timestamp-plugin/ Timestamp Plugin]
  +
| Provides formatted timestamps for maven builds. || ||
  +
|-
  +
| || [https://www.mojohaus.org/properties-maven-plugin/ Properties Plugin]
  +
| Provides goals to read and write properties from and to files. || ||
  +
|-
  +
| || [http://site.kuali.org/maven/plugins/properties-maven-plugin/1.3.2/plugin-info.html Properties Plugin]
  +
| Provides goals to read and write properties from files. || ||
  +
|-
  +
| || [http://code.google.com/p/maven-replacer-plugin/ Replacer Plugin]
  +
| Replace tokens within a file with a given value and fully supports regular expressions. || ||
  +
|-
  +
| || [https://github.com/jdcasey/expression-maven-plugin Expression Plugin]
  +
| Allow users to resolve expressions interactively. || ||
  +
|-
  +
| Source configuration management tools support || style='white-space:nowrap' | [http://code.google.com/p/maven-svn-revision-number-plugin/ SVN Revision Number Plugin]
  +
| Retrieves the revision number and the status of the Subversion working copy directory and sets project properties that can be used later in the build process. || || <tt>svnkit-1.7.0-SNAPSHOT</tt>
  +
|-
  +
| Software platforms support || [https://simpligility.github.io/android-maven-plugin/ Android Maven Plugin] || || ||
  +
|-
  +
| Maven support || [http://www.eclipse.org/m2e/ M2Eclipse]
  +
| provides tight integration for Apache Maven into the IDE || ||
  +
|-
  +
| || [http://maven.apache.org/plugins/maven-eclipse-plugin/ Eclipse Plugin] || || ||
  +
|-
  +
| || [http://www.eclipse.org/tycho/ Tycho]
  +
| a set of Maven plugins and extensions for building Eclipse plugins and OSGi bundles with Maven. || [http://wiki.eclipse.org/Tycho Tycho Wiki] ||
  +
|-
  +
| || [https://github.com/reficio/p2-maven-plugin P2 Plugin]
  +
| responsible for the automation of dependency management in the Eclipse RCP environment. || ||
  +
|-
  +
| || [http://rgladwell.github.io/m2e-android/ m2e-android] || Maven Eclipse (m2e) plug-in that adds maven support for the Android Developer Tools (ADT) and the Andmore Project. || ||
  +
|}
   
 
===Code analysis tools support===
 
===Code analysis tools support===
Line 156: Line 174:
 
** http://creadur.apache.org/rat/apache-rat-plugin/
 
** http://creadur.apache.org/rat/apache-rat-plugin/
 
** verifies, whether your source code matches standards like the ASF Source Header and Copyright Notice Policy
 
** verifies, whether your source code matches standards like the ASF Source Header and Copyright Notice Policy
  +
  +
* '''m2e-code-quality'''
  +
** http://m2e-code-quality.github.io/m2e-code-quality/
  +
** Desc. : A collection of Eclipse plugins for M2Eclipse that carry configuration from the Checkstyle, FindBugs and PMD Maven plugins to their corresponding Eclipse plugins.
  +
** License: Apache-2.0
  +
** Sources : https://github.com/m2e-code-quality/m2e-code-quality/
  +
  +
===Documentation tools support===
  +
  +
* '''Asciidoctor Maven Plugin'''
  +
** https://asciidoctor.org/docs/asciidoctor-maven-plugin/
  +
** the official way to convert your AsciiDoc documentation using Asciidoctor from an Apache Maven build.
   
 
===Continuous integration tools support===
 
===Continuous integration tools support===
Line 247: Line 277:
 
** http://docs.codehaus.org/display/JETTY/Maven+Jetty+Plugin
 
** http://docs.codehaus.org/display/JETTY/Maven+Jetty+Plugin
 
** [http://www.eclipse.org/jetty/documentation/current/jetty-maven-plugin.html Configuring the Jetty Maven Plugin] (for Jetty 9 or higher)
 
** [http://www.eclipse.org/jetty/documentation/current/jetty-maven-plugin.html Configuring the Jetty Maven Plugin] (for Jetty 9 or higher)
 
===Eclipse support===
 
 
* '''M2Eclipse'''
 
** http://www.eclipse.org/m2e/
 
** provides tight integration for Apache Maven into the IDE
 
 
* '''Eclipse Plugin'''
 
** http://maven.apache.org/plugins/maven-eclipse-plugin/
 
 
* '''Tycho'''
 
** a set of Maven plugins and extensions for building Eclipse plugins and OSGi bundles with Maven.
 
** http://www.eclipse.org/tycho/
 
** http://www.eclipse.org/tycho/sitedocs/
 
** [http://wiki.eclipse.org/Tycho/Reference_Card Tycho/Reference Card]
 
** [http://wiki.eclipse.org/Tycho/Packaging_Types Tycho/Packaging Types]
 
** [http://wiki.eclipse.org/Tycho/FAQ Tycho/FAQ]
 
 
* '''P2 Plugin'''
 
** https://github.com/reficio/p2-maven-plugin
 
** responsible for the automation of dependency management in the Eclipse RCP environment.
 
   
 
===misc===
 
===misc===
Line 307: Line 316:
 
===Sonatype books===
 
===Sonatype books===
   
*[http://books.sonatype.com/mvnref-book/reference/ Maven: The Complete Reference]
+
* [https://books.sonatype.com/mvnref-book/reference/index.html Maven: The Complete Reference]
*[http://books.sonatype.com/mvnex-book/reference/index.html Maven by Example]
+
* [https://books.sonatype.com/mvnex-book/reference/index.html Maven by Example]
*[http://books.sonatype.com/nexus-book/ Repository Management with Nexus]
+
* [http://books.sonatype.com/nexus-book/ Repository Management with Nexus]
   
*[http://www.sonatype.com/books/mcookbook/reference/ Maven Cookbook]
+
* [https://books.sonatype.com/mcookbook/pdf/mcookbook-pdf.pdf Maven Cookbook]
*[http://www.sonatype.com/books/m2eclipse-book/reference/ Developing with Eclipse and Maven]
+
* [http://www.sonatype.com/books/m2eclipse-book/reference/ Developing with Eclipse and Maven]
   
 
===Multi module project===
 
===Multi module project===
Line 354: Line 363:
   
 
===Deployment process and security===
 
===Deployment process and security===
  +
 
*[http://maven.apache.org/settings.html#Servers <servers> element in settings.xml]
 
*[http://maven.apache.org/settings.html#Servers <servers> element in settings.xml]
 
*[http://maven.apache.org/guides/mini/guide-encryption.html Password encryption]
 
*[http://maven.apache.org/guides/mini/guide-encryption.html Password encryption]
 
*[http://maven.apache.org/wagon/ Maven Wagon]
 
*[http://maven.apache.org/wagon/ Maven Wagon]
 
*[http://stackoverflow.com/questions/1816909/uploading-a-directory-using-sftp-with-maven Uploading a directory using sftp with Maven]
 
*[http://stackoverflow.com/questions/1816909/uploading-a-directory-using-sftp-with-maven Uploading a directory using sftp with Maven]
  +
  +
* [https://stackoverflow.com/questions/4725668/how-to-deploy-snapshot-with-sources-and-javadoc '''How to deploy SNAPSHOT with sources and JavaDoc?'''] (Jan 18 '11)
  +
** using <tt>maven-source-plugin:jar-no-fork</tt> goal and <tt>maven-javadoc-plugin:jar</tt> goal is enough and best.
  +
** No need to use <tt>deploy:deploy-file</tt> goal nor [https://www.mojohaus.org/build-helper-maven-plugin/attach-artifact-mojo.html <tt>build-helper:attach-artifact</tt>] goal.
   
 
===Site process===
 
===Site process===
Line 433: Line 447:
 
* [http://www.avajava.com/tutorials/lessons/how-do-i-update-my-classpath-with-an-eclipse-user-library-via-the-maven-eclipse-plugin.html How do I update my classpath with an Eclipse User Library via the maven eclipse plugin?]
 
* [http://www.avajava.com/tutorials/lessons/how-do-i-update-my-classpath-with-an-eclipse-user-library-via-the-maven-eclipse-plugin.html How do I update my classpath with an Eclipse User Library via the maven eclipse plugin?]
 
* [https://maven.apache.org/enforcer/enforcer-rules/requireJavaVersion.html How to enforces certain Java JDK versions]
 
* [https://maven.apache.org/enforcer/enforcer-rules/requireJavaVersion.html How to enforces certain Java JDK versions]
  +
  +
* [https://blog.progs.be/517/publishing-javadoc-to-github-using-maven '''Publishing javadoc to github using maven'''] (September 9, 2013)
  +
  +
====Examples====
  +
  +
* [https://repo1.maven.org/maven2/org/sonatype/oss/oss-parent/5/oss-parent-5.pom Sonatype OSS Parent POM]
   
 
==Tips and Tricks==
 
==Tips and Tricks==
Line 438: Line 458:
 
===Simple POM===
 
===Simple POM===
   
<syntaxhighlight lang="xml" line enclose='div' style="margin-left:40px">
+
<syntaxhighlight lang="xml" enclose='div' style='font-size:90%'>
 
<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">
 
<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>
 
<modelVersion>4.0.0</modelVersion>
<groupId>thirdstage.exercise</groupId>
+
<groupId>foo</groupId>
<artifactId>rest</artifactId>
+
<artifactId>foo-baz</artifactId>
 
<version>0.0.1-SNAPSHOT</version>
 
<version>0.0.1-SNAPSHOT</version>
   
  +
<name>Project Name</name>
<prerequisites>
 
<maven>3.0</maven>
+
<description>...</description>
  +
</prerequisites>
 
  +
<developers>
  +
<developer>
  +
<id>3rdstage</id>
  +
<name>Sangmoon Oh</name>
  +
<email>halfface@chollian.net</email>
  +
</developer>
  +
</developers>
   
 
<properties>
 
<properties>
Line 457: Line 484:
 
<maven.site.skip>false</maven.site.skip> <!-- consumed by maven-site-plugin -->
 
<maven.site.skip>false</maven.site.skip> <!-- consumed by maven-site-plugin -->
 
<maven.site.deploy.skip>true</maven.site.deploy.skip> <!-- consumed by maven-site-plugin -->
 
<maven.site.deploy.skip>true</maven.site.deploy.skip> <!-- consumed by maven-site-plugin -->
  +
<exec.skip>false</exec.skip> <!-- consumed by exec-maven-plugin -->
 
<generateProjectInfo>false</generateProjectInfo> <!-- consumed by maven-site-plugin -->
 
<generateProjectInfo>false</generateProjectInfo> <!-- consumed by maven-site-plugin -->
 
<generateReports>true</generateReports> <!-- consumed by maven-site-plugin -->
 
<generateReports>true</generateReports> <!-- consumed by maven-site-plugin -->
 
<maven.javadoc.skip>false</maven.javadoc.skip>
 
<maven.javadoc.skip>false</maven.javadoc.skip>
  +
<maven.javadoc.failOnWarnings>false</maven.javadoc.failOnWarnings>
  +
<swagger-codegen.skip>true</swagger-codegen.skip>
  +
<doclint>none</doclint>
 
<findbugs.skip>true</findbugs.skip>
 
<findbugs.skip>true</findbugs.skip>
 
<checkstyle.skip>true</checkstyle.skip>
 
<checkstyle.skip>true</checkstyle.skip>
<dependencies.release.updatePolicy>never</dependencies.release.updatePolicy>
+
<dependencies.release.updatePolicy>never</dependencies.release.updatePolicy> <!-- always | daily | never -->
 
<!-- versions for Java SDK and dependencies -->
 
<!-- versions for Java SDK and dependencies -->
<java.version>1.9</java.version>
+
<java.version>11</java.version>
 
<jsr305.version>3.0.2</jsr305.version> <!-- https://mvnrepository.com/artifact/com.google.code.findbugs/jsr305 -->
 
<jsr305.version>3.0.2</jsr305.version> <!-- https://mvnrepository.com/artifact/com.google.code.findbugs/jsr305 -->
 
<validation-api.version>2.0.1.Final</validation-api.version> <!-- https://mvnrepository.com/artifact/javax.validation/validation-api -->
 
<validation-api.version>2.0.1.Final</validation-api.version> <!-- https://mvnrepository.com/artifact/javax.validation/validation-api -->
<hibernate-validator.version>6.0.16.Final</hibernate-validator.version> <!-- https://mvnrepository.com/artifact/org.hibernate.validator/hibernate-validator -->
+
<hibernate-validator.version>6.1.2.Final</hibernate-validator.version> <!-- https://mvnrepository.com/artifact/org.hibernate.validator/hibernate-validator -->
<slf4j.version>1.7.21</slf4j.version>
+
<slf4j.version>1.7.30</slf4j.version> <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
<logback.version>1.1.7</logback.version>
+
<logback.version>1.2.3</logback.version> <!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-classic -->
<junit.version>4.12</junit.version>
+
<janino.version>3.1.0</janino.version> <!-- https://mvnrepository.com/artifact/org.codehaus.janino/janino -->
<junit5.version>5.5.1</junit5.version> <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api -->
+
<junit5.version>5.6.1</junit5.version> <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-engine -->
<testng.version>6.14.3</testng.version> <!-- https://mvnrepository.com/artifact/org.testng/testng -->
+
<testng.version>6.9.10</testng.version>
<mockito.version>2.6.9</mockito.version>
+
<mockito.version>3.3.3</mockito.version> <!-- https://mvnrepository.com/artifact/org.mockito -->
<commons.lang3.version>3.5</commons.lang3.version>
+
<commons-lang3.version>3.9</commons-lang3.version> <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
  +
<commons-validator.version>1.6</commons-validator.version> <!-- https://mvnrepository.com/artifact/commons-validator/commons-validator -->
  +
<commons-collections4.version>4.4</commons-collections4.version> <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-collections4 -->
 
<typesafe-config.version>1.3.1</typesafe-config.version>
 
<typesafe-config.version>1.3.1</typesafe-config.version>
<jackson.version>2.7.4</jackson.version>
+
<swagger.version>2.0.8</swagger.version> <!-- https://mvnrepository.com/artifact/io.swagger.core.v3 -->
  +
<springfox-swagger2.version>2.9.2</springfox-swagger2.version> <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 -->
<swagger.version>1.5.12</swagger.version>
 
<spring.version>4.3.5.RELEASE</spring.version>
 
 
<mybatis.version>3.5.1</mybatis.version> <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
 
<mybatis.version>3.5.1</mybatis.version> <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
  +
<jjwt.version>0.10.7</jjwt.version> <!-- https://mvnrepository.com/artifact/io.jsonwebtoken -->
  +
<web3j.version>4.5.17</web3j.version> <!-- https://mvnrepository.com/artifact/org.web3j -->
  +
<okhttp.version>4.3.1</okhttp.version>
 
<!-- version for Maven plugins -->
 
<!-- version for Maven plugins -->
<maven-compiler-plugin.version>3.8.0</maven-compiler-plugin.version> <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-compiler-plugin -->
+
<maven-enforcer-plugin.version>3.0.0-M3</maven-enforcer-plugin.version> <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-enforcer-plugin -->
<maven-site-plugin.version>3.7.1</maven-site-plugin.version> <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-site-plugin -->
+
<maven-compiler-plugin.version>3.10.1</maven-compiler-plugin.version> <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-compiler-plugin -->
<swagger-maven-plugin.version>3.1.4</swagger-maven-plugin.version>
+
<maven-surefire-plugin.version>2.22.2</maven-surefire-plugin.version> <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-surefire-plugin -->
<swagger-codegen-maven-plugin.version>2.2.1</swagger-codegen-maven-plugin.version>
+
<maven-site-plugin.version>3.9.0</maven-site-plugin.version> <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-site-plugin -->
<maven-jar-plugin.version>3.1.1</maven-jar-plugin.version> <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-jar-plugin -->
+
<maven-jar-plugin.version>3.2.0</maven-jar-plugin.version> <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-jar-plugin -->
<maven-javadoc-plugin.version>2.10.4</maven-javadoc-plugin.version> <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-javadoc-plugin -->
+
<maven-javadoc-plugin.version>3.2.0</maven-javadoc-plugin.version> <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-javadoc-plugin -->
<findbugs-maven-plugin.version>3.0.4</findbugs-maven-plugin.version>
+
<findbugs-maven-plugin.version>3.0.5</findbugs-maven-plugin.version> <!-- https://mvnrepository.com/artifact/org.codehaus.mojo/findbugs-maven-plugin -->
<maven-checkstyle-plugin.version>2.17</maven-checkstyle-plugin.version>
+
<maven-checkstyle-plugin.version>3.1.1</maven-checkstyle-plugin.version> <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-checkstyle-plugin -->
<duplicate-finder-maven-plugin.version>1.2.1</duplicate-finder-maven-plugin.version>
+
<duplicate-finder-maven-plugin.version>1.4.0</duplicate-finder-maven-plugin.version> <!-- https://mvnrepository.com/artifact/org.basepom.maven/duplicate-finder-maven-plugin -->
<maven-eclipse-plugin.version>2.10</maven-eclipse-plugin.version>
+
<maven-eclipse-plugin.version>2.10</maven-eclipse-plugin.version> <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-eclipse-plugin -->
  +
<web3j-maven-plugin.version>4.5.11</web3j-maven-plugin.version> <!-- https://mvnrepository.com/artifact/org.web3j/web3j-maven-plugin -->
  +
<exec-maven-plugin.version>3.1.0</exec-maven-plugin.version>
  +
<swagger-maven-plugin.version>3.1.8</swagger-maven-plugin.version> <!-- https://github.com/kongchen/swagger-maven-plugin -->
  +
<swagger-codegen-maven-plugin.version>3.0.0-rc1</swagger-codegen-maven-plugin.version> <!-- https://mvnrepository.com/artifact/io.swagger/swagger-codegen-maven-plugin -->
  +
<swagger-codegen-maven-plugin.v3.version>3.0.10</swagger-codegen-maven-plugin.v3.version> <!-- https://mvnrepository.com/artifact/io.swagger.codegen.v3/swagger-codegen-maven-plugin -->
  +
<maven.compiler.source>${java.version}</maven.compiler.source>
  +
<maven.compiler.target>${java.version}</maven.compiler.target>
 
</properties>
 
</properties>
   
Line 496: Line 538:
 
<!-- For more repositories, refer https://mvnrepository.com/repos -->
 
<!-- For more repositories, refer https://mvnrepository.com/repos -->
 
<repository>
 
<repository>
<id>central1</id>
+
<id>central</id>
<url>http://repo1.maven.org/maven2/</url>
+
<url>https://repo1.maven.org/maven2/</url>
  +
<releases><updatePolicy>${dependencies.release.updatePolicy}</updatePolicy></releases>
<releases>
 
  +
<snapshots><enabled>false</enabled></snapshots>
<updatePolicy>${dependencies.release.updatePolicy}</updatePolicy>
 
</releases>
 
<snapshots>
 
<enabled>false</enabled>
 
</snapshots>
 
</repository>
 
<repository>
 
<id>central2</id>
 
<url>http://repo2.maven.org/maven2/</url>
 
<releases>
 
<updatePolicy>${dependencies.release.updatePolicy}</updatePolicy>
 
</releases>
 
<snapshots>
 
<enabled>false</enabled>
 
</snapshots>
 
 
</repository>
 
</repository>
 
<repository>
 
<repository>
 
<id>java.net.public</id>
 
<id>java.net.public</id>
 
<url>https://maven.java.net/content/groups/public/</url>
 
<url>https://maven.java.net/content/groups/public/</url>
  +
<releases><updatePolicy>${dependencies.release.updatePolicy}</updatePolicy></releases>
<releases>
 
  +
<snapshots><enabled>true</enabled></snapshots>
<updatePolicy>${dependencies.release.updatePolicy}</updatePolicy>
 
</releases>
 
<snapshots>
 
<enabled>true</enabled>
 
</snapshots>
 
 
</repository>
 
</repository>
 
</repositories>
 
</repositories>
Line 529: Line 553:
 
<pluginRepositories>
 
<pluginRepositories>
 
<pluginRepository>
 
<pluginRepository>
<id>central1</id>
+
<id>central</id>
<url>http://repo1.maven.org/maven2/</url>
+
<url>https://repo1.maven.org/maven2/</url>
  +
<releases><updatePolicy>${dependencies.release.updatePolicy}</updatePolicy></releases>
<releases>
 
  +
<snapshots><enabled>false</enabled></snapshots>
<updatePolicy>${dependencies.release.updatePolicy}</updatePolicy>
 
</releases>
 
<snapshots>
 
<enabled>false</enabled>
 
</snapshots>
 
</pluginRepository>
 
<pluginRepository>
 
<id>central2</id>
 
<url>http://repo2.maven.org/maven2/</url>
 
<releases>
 
<updatePolicy>${dependencies.release.updatePolicy}</updatePolicy>
 
</releases>
 
<snapshots>
 
<enabled>false</enabled>
 
</snapshots>
 
 
</pluginRepository>
 
</pluginRepository>
<!-- codehaus.org has been effectively shut down as an artifact repository. -->
 
<!-- <pluginRepository> -->
 
<!-- <id>mojo-release</id> -->
 
<!-- <url>http://repository.codehaus.org/</url> -->
 
<!-- <releases> -->
 
<!-- <updatePolicy>${dependencies.release.updatePolicy}</updatePolicy> -->
 
<!-- </releases> -->
 
<!-- <snapshots> -->
 
<!-- <enabled>false</enabled> -->
 
<!-- </snapshots> -->
 
<!-- </pluginRepository> -->
 
<!-- <pluginRepository> -->
 
<!-- <id>mojo-snapshot</id> -->
 
<!-- <url>http://snapshots.repository.codehaus.org/</url> -->
 
<!-- <releases> -->
 
<!-- <enabled>false</enabled> -->
 
<!-- </releases> -->
 
<!-- <snapshots> -->
 
<!-- <enabled>true</enabled> -->
 
<!-- </snapshots> -->
 
<!-- </pluginRepository> -->
 
 
</pluginRepositories>
 
</pluginRepositories>
   
Line 580: Line 569:
 
<reports>
 
<reports>
 
<report>index</report>
 
<report>index</report>
<!-- <report>dependencies</report> -->
 
<!-- <report>project-team</report> -->
 
<!-- <report>mailing-list</report> -->
 
<!-- <report>cim</report> -->
 
<!-- <report>issue-tracking</report> -->
 
<!-- <report>license</report> -->
 
<!-- <report>scm</report> -->
 
 
</reports>
 
</reports>
 
</reportSet>
 
</reportSet>
Line 637: Line 619:
 
<build>
 
<build>
 
<plugins>
 
<plugins>
  +
<plugin>
  +
<groupId>org.apache.maven.plugins</groupId>
  +
<artifactId>maven-enforcer-plugin</artifactId>
  +
<version>${maven-enforcer-plugin.version}</version>
  +
<executions>
  +
<execution>
  +
<id>enforce-java</id>
  +
<goals><goal>enforce</goal></goals>
  +
<configuration>
  +
<!-- For more standard rules, refer http://maven.apache.org/enforcer/enforcer-rules/ -->
  +
<rules>
  +
<requireJavaVersion><version>${java.version}</version></requireJavaVersion>
  +
<requireMavenVersion><version>3.0</version></requireMavenVersion>
  +
</rules>
  +
</configuration>
  +
</execution>
  +
</executions>
  +
</plugin>
 
<plugin>
 
<plugin>
 
<groupId>org.basepom.maven</groupId>
 
<groupId>org.basepom.maven</groupId>
Line 644: Line 644:
 
<id>find-duplicate-classes</id>
 
<id>find-duplicate-classes</id>
 
<phase>prepare-package</phase>
 
<phase>prepare-package</phase>
<goals>
+
<goals><goal>check</goal></goals>
<goal>check</goal>
 
</goals>
 
 
</execution>
 
</execution>
 
</executions>
 
</executions>
Line 679: Line 677:
 
<target>${java.version}</target>
 
<target>${java.version}</target>
 
</configuration>
 
</configuration>
  +
</plugin>
  +
<plugin>
  +
<!-- For more, refer https://maven.apache.org/surefire/maven-surefire-plugin/ -->
  +
<groupId>org.apache.maven.plugins</groupId>
  +
<artifactId>maven-surefire-plugin</artifactId>
  +
<version>${maven-surefire-plugin.version}</version>
 
</plugin>
 
</plugin>
 
<plugin>
 
<plugin>
Line 702: Line 706:
 
<id>generate-swagger-api</id>
 
<id>generate-swagger-api</id>
 
<phase>process-classes</phase>
 
<phase>process-classes</phase>
<goals>
+
<goals><goal>generate</goal></goals>
<goal>generate</goal>
 
</goals>
 
 
</execution>
 
</execution>
 
</executions>
 
</executions>
Line 720: Line 722:
 
<id>generate-rest-api-doc</id>
 
<id>generate-rest-api-doc</id>
 
<phase>process-classes</phase>
 
<phase>process-classes</phase>
<goals>
+
<goals><goal>generate</goal></goals>
<goal>generate</goal>
 
</goals>
 
 
<configuration>
 
<configuration>
 
<inputSpec>${project.build.directory}/swagger.json</inputSpec>
 
<inputSpec>${project.build.directory}/swagger.json</inputSpec>
 
<language>html2</language>
 
<language>html2</language>
 
<output>${project.build.directory}/generated-sources/swagger/html2</output>
 
<output>${project.build.directory}/generated-sources/swagger/html2</output>
  +
<skip>${swagger-codegen.skip}</skip>
 
</configuration>
 
</configuration>
 
</execution>
 
</execution>
Line 737: Line 738:
 
<version>${maven-jar-plugin.version}</version>
 
<version>${maven-jar-plugin.version}</version>
 
<configuration>
 
<configuration>
<!-- For more on Maven archiver, refer http://maven.apache.org/shared/maven-archiver/index.html -->
+
<!-- For more on Maven archiver, refer http://maven.apache.org/shared/maven-archiver/index.html -->
 
<archive>
 
<archive>
 
<addMavenDescriptor>false</addMavenDescriptor>
 
<addMavenDescriptor>false</addMavenDescriptor>
Line 761: Line 762:
 
<version>${maven-javadoc-plugin.version}</version>
 
<version>${maven-javadoc-plugin.version}</version>
 
<configuration>
 
<configuration>
  +
<javadocExecutable>${java.home}/bin/javadoc</javadocExecutable>
<additionalJOptions>
 
<!-- causes error with JDK 8 <additionalJOption>-Xms128m</additionalJOption> -->
+
<!-- <javadocVersion>${java.version}</javadocVersion> -->
</additionalJOptions>
+
<source>${java.version}</source>
  +
<maxmemory>256m</maxmemory>
  +
<!-- causes error with JDK 8 <additionalJOption>-Xms128m</additionalJOption> -->
  +
<additionalJOptions>--frames</additionalJOptions>
 
<failOnError>false</failOnError>
 
<failOnError>false</failOnError>
  +
<attach>true</attach> <!-- for `javadoc:jar`, refer https://maven.apache.org/plugins/maven-javadoc-plugin/jar-mojo.html#attach -->
 
<docencoding>${project.reporting.outputEncoding}</docencoding>
 
<docencoding>${project.reporting.outputEncoding}</docencoding>
 
<encoding>${project.build.sourceEncoding}</encoding>
 
<encoding>${project.build.sourceEncoding}</encoding>
Line 770: Line 775:
 
<windowtitle>${project.name} ${project.version} API</windowtitle>
 
<windowtitle>${project.name} ${project.version} API</windowtitle>
 
<links>
 
<links>
<link>http://docs.oracle.com/javase/8/docs/api/</link>
+
<link>https://docs.oracle.com/javase/8/docs/api/</link>
<link>http://docs.oracle.com/javaee/6/api/</link>
+
<link>https://docs.oracle.com/javaee/7/api/</link>
<link>http://www.javadoc.io/doc/com.google.code.findbugs/jsr305/3.0.1</link>
+
<link>http://www.javadoc.io/doc/com.google.code.findbugs/jsr305/${jsr305.version}</link>
<link>http://docs.jboss.org/hibernate/beanvalidation/spec/1.1/api/</link>
+
<link>http://docs.jboss.org/hibernate/beanvalidation/spec/2.0/api/</link>
<link>http://docs.jboss.org/hibernate/validator/5.2/api/</link>
+
<link>http://docs.jboss.org/hibernate/validator/6.1/api/</link>
<link>https://www.slf4j.org/apidocs/</link>
+
<link>http://www.javadoc.io/doc/org.slf4j/slf4j-api/${slf4j.version}/</link>
<link>http://junit.org/junit4/javadoc/${junit.version}/</link>
+
<link>https://junit.org/junit5/docs/${junit5.version}/api/</link>
<link>http://commons.apache.org/proper/commons-lang/javadocs/api-${commons.lang3.version}/</link>
+
<link>http://commons.apache.org/proper/commons-lang/javadocs/api-${commons-lang3.version}/</link>
<link>http://commons.apache.org/proper/commons-collections/javadocs/api-release/</link>
+
<link>http://commons.apache.org/proper/commons-collections/javadocs/api-${commons-collections4.version}/</link>
 
<link>http://docs.swagger.io/swagger-core/v1.5.0/apidocs/</link>
 
<link>http://docs.swagger.io/swagger-core/v1.5.0/apidocs/</link>
<link>http://docs.spring.io/spring/docs/4.3.x/javadoc-api/</link>
+
<link>https://javadoc.io/doc/org.web3j/core/${web3j.version}</link>
<link>http://docs.spring.io/spring-boot/docs/1.5.x/api/</link>
+
<link>https://javadoc.io/doc/org.web3j/abi/${web3j.version}</link>
  +
<link>https://javadoc.io/doc/org.web3j/crypto/${web3j.version}</link>
  +
<link>https://javadoc.io/doc/org.web3j/utils/${web3j.version}</link>
 
</links>
 
</links>
 
<show>protected</show>
 
<show>protected</show>
 
<splitindex>true</splitindex>
 
<splitindex>true</splitindex>
  +
<stylesheet>java</stylesheet> <!-- 'java' (default) or 'maven' -->
 
</configuration>
 
</configuration>
  +
<executions>
  +
<execution>
  +
<id>javadoc-jar</id>
  +
<phase>prepare-package</phase> <!-- or 'package' -->
  +
<goals><goal>jar</goal></goals>
  +
</execution>
  +
</executions>
 
</plugin>
 
</plugin>
 
<plugin>
 
<plugin>
Line 841: Line 856:
 
<artifactId>maven-dependency-plugin</artifactId>
 
<artifactId>maven-dependency-plugin</artifactId>
 
<versionRange>[1.0.0,)</versionRange>
 
<versionRange>[1.0.0,)</versionRange>
<goals>
+
<goals><goal>copy-dependencies</goal></goals>
<goal>copy-dependencies</goal>
 
</goals>
 
 
</pluginExecutionFilter>
 
</pluginExecutionFilter>
<action>
+
<action><ignore/></action>
<ignore/>
 
</action>
 
 
</pluginExecution>
 
</pluginExecution>
 
<pluginExecution>
 
<pluginExecution>
Line 854: Line 865:
 
<artifactId>maven-antrun-plugin</artifactId>
 
<artifactId>maven-antrun-plugin</artifactId>
 
<versionRange>[1.0.0,)</versionRange>
 
<versionRange>[1.0.0,)</versionRange>
<goals>
+
<goals><goal>run</goal></goals>
<goal>run</goal>
 
</goals>
 
 
</pluginExecutionFilter>
 
</pluginExecutionFilter>
<action>
+
<action><ignore/></action>
<ignore/>
 
</action>
 
 
</pluginExecution>
 
</pluginExecution>
 
<pluginExecution>
 
<pluginExecution>
Line 872: Line 879:
 
</goals>
 
</goals>
 
</pluginExecutionFilter>
 
</pluginExecutionFilter>
<action>
+
<action><ignore/></action>
<ignore/>
 
</action>
 
 
</pluginExecution>
 
</pluginExecution>
 
<pluginExecution>
 
<pluginExecution>
Line 881: Line 886:
 
<artifactId>build-helper-maven-plugin</artifactId>
 
<artifactId>build-helper-maven-plugin</artifactId>
 
<versionRange>[1.0.0,)</versionRange>
 
<versionRange>[1.0.0,)</versionRange>
<goals>
+
<goals><goal>parse-version</goal></goals>
<goal>parse-version</goal>
 
</goals>
 
 
</pluginExecutionFilter>
 
</pluginExecutionFilter>
<action>
+
<action><ignore/></action>
<ignore/>
 
</action>
 
 
</pluginExecution>
 
</pluginExecution>
 
<pluginExecution>
 
<pluginExecution>
Line 900: Line 901:
 
</goals>
 
</goals>
 
</pluginExecutionFilter>
 
</pluginExecutionFilter>
<action>
+
<action><ignore/></action>
<ignore/>
 
</action>
 
 
</pluginExecution>
 
</pluginExecution>
 
</pluginExecutions>
 
</pluginExecutions>
Line 964: Line 963:
 
</dependency>
 
</dependency>
 
<dependency>
 
<dependency>
  +
<!-- https://junit.org/junit5/docs/current/user-guide/#running-tests-build-maven -->
<groupId>junit</groupId>
 
  +
<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-engine/5.5.1 -->
<artifactId>junit</artifactId>
 
  +
<!-- 'junit-jupiter-engine' depends on 'junit-jupiter-api' -->
<version>${junit.version}</version>
 
  +
<groupId>org.junit.jupiter</groupId>
  +
<artifactId>junit-jupiter-engine</artifactId>
  +
<version>${junit5.version}</version>
 
<scope>test</scope>
 
<scope>test</scope>
 
</dependency>
 
</dependency>
Line 978: Line 980:
 
<groupId>org.mockito</groupId>
 
<groupId>org.mockito</groupId>
 
<artifactId>mockito-core</artifactId>
 
<artifactId>mockito-core</artifactId>
  +
<version>${mockito.version}</version>
  +
<scope>test</scope>
  +
</dependency>
  +
<dependency>
  +
<groupId>org.mockito</groupId>
  +
<artifactId>mockito-junit-jupiter</artifactId>
 
<version>${mockito.version}</version>
 
<version>${mockito.version}</version>
 
<scope>test</scope>
 
<scope>test</scope>
Line 984: Line 992:
 
<groupId>org.apache.commons</groupId>
 
<groupId>org.apache.commons</groupId>
 
<artifactId>commons-lang3</artifactId>
 
<artifactId>commons-lang3</artifactId>
<version>${commons.lang3.version}</version>
+
<version>${commons-lang3.version}</version>
 
</dependency>
 
</dependency>
 
<!-- For more typesafe config, refer https://github.com/typesafehub/config -->
 
<!-- For more typesafe config, refer https://github.com/typesafehub/config -->
Line 998: Line 1,006:
 
===Typical POM for Spring Boot Project===
 
===Typical POM for Spring Boot Project===
   
<syntaxhighlight lang="xml" line enclose="div" style="margin-left:40px">
+
<syntaxhighlight lang="xml" enclose='div' style='font-size:90%;white-space:nowrap'>
 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 
<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">
 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
Line 1,007: Line 1,015:
 
<groupId>org.springframework.boot</groupId>
 
<groupId>org.springframework.boot</groupId>
 
<artifactId>spring-boot-starter-parent</artifactId>
 
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.6.RELEASE</version>
+
<version>2.3.5.RELEASE</version> <!-- last as of 2020/11/03 : v2.3.5.RELEASE -->
 
</parent>
 
</parent>
<groupId>mygroup</groupId>
+
<groupId>foo</groupId>
<artifactId>mygroup.myproject</artifactId>
+
<artifactId>foo-bar</artifactId>
 
<version>0.0.1-SNAPSHOT</version>
 
<version>0.0.1-SNAPSHOT</version>
 
<name>myproject</name>
 
<description>...</description>
 
 
<prerequisites>
 
<maven>3.0</maven>
 
</prerequisites>
 
   
 
<properties>
 
<properties>
Line 1,026: Line 1,027:
 
<skipTests>false</skipTests>
 
<skipTests>false</skipTests>
 
<maven.deploy.skip>true</maven.deploy.skip>
 
<maven.deploy.skip>true</maven.deploy.skip>
  +
<maven.javadoc.skip>true</maven.javadoc.skip>
  +
<maven.javadoc.failOnWarnings>false</maven.javadoc.failOnWarnings>
 
<maven.site.skip>false</maven.site.skip> <!-- consumed by maven-site-plugin -->
 
<maven.site.skip>false</maven.site.skip> <!-- consumed by maven-site-plugin -->
 
<maven.site.deploy.skip>true</maven.site.deploy.skip> <!-- consumed by maven-site-plugin -->
 
<maven.site.deploy.skip>true</maven.site.deploy.skip> <!-- consumed by maven-site-plugin -->
 
<generateProjectInfo>false</generateProjectInfo> <!-- consumed by maven-site-plugin -->
 
<generateProjectInfo>false</generateProjectInfo> <!-- consumed by maven-site-plugin -->
 
<generateReports>true</generateReports> <!-- consumed by maven-site-plugin -->
 
<generateReports>true</generateReports> <!-- consumed by maven-site-plugin -->
  +
<doclint>none</doclint> <!-- http://maven.apache.org/plugins/maven-javadoc-plugin/javadoc-mojo.html#doclint -->
<maven.javadoc.skip>false</maven.javadoc.skip>
 
 
<findbugs.skip>true</findbugs.skip>
 
<findbugs.skip>true</findbugs.skip>
 
<checkstyle.skip>true</checkstyle.skip>
 
<checkstyle.skip>true</checkstyle.skip>
<dependencies.release.updatePolicy>never</dependencies.release.updatePolicy>
+
<dependencies.release.updatePolicy>daily</dependencies.release.updatePolicy> <!-- always | daily | never -->
 
<!-- versions for Java SDK and dependencies -->
 
<!-- versions for Java SDK and dependencies -->
 
<java.version>1.9</java.version>
 
<java.version>1.9</java.version>
Line 1,054: Line 1,057:
 
<mybatis.version>3.5.1</mybatis.version> <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
 
<mybatis.version>3.5.1</mybatis.version> <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
 
<jjwt.version>0.10.7</jjwt.version> <!-- https://mvnrepository.com/artifact/io.jsonwebtoken -->
 
<jjwt.version>0.10.7</jjwt.version> <!-- https://mvnrepository.com/artifact/io.jsonwebtoken -->
<web3j.version>4.5.17</web3j.version> <!-- https://mvnrepository.com/artifact/org.web3j -->
+
<web3j.version>4.8.0</web3j.version> <!-- https://mvnrepository.com/artifact/org.web3j -->
  +
<okhttp.version>4.3.1</okhttp.version> <!-- https://mvnrepository.com/artifact/com.squareup.okhttp3 -->
 
<!-- version for Maven plugins -->
 
<!-- version for Maven plugins -->
  +
<maven-enforcer-plugin.version>3.0.0-M3</maven-enforcer-plugin.version> <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-enforcer-plugin -->
 
<maven-compiler-plugin.version>3.8.1</maven-compiler-plugin.version> <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-compiler-plugin -->
 
<maven-compiler-plugin.version>3.8.1</maven-compiler-plugin.version> <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-compiler-plugin -->
  +
<maven-surefire-plugin.version>2.22.2</maven-surefire-plugin.version> <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-surefire-plugin -->
  +
<maven-jar-plugin.version>3.2.0</maven-jar-plugin.version> <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-jar-plugin -->
 
<maven-site-plugin.version>3.9.0</maven-site-plugin.version> <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-site-plugin -->
 
<maven-site-plugin.version>3.9.0</maven-site-plugin.version> <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-site-plugin -->
<maven-jar-plugin.version>3.2.0</maven-jar-plugin.version> <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-jar-plugin -->
 
 
<maven-javadoc-plugin.version>3.2.0</maven-javadoc-plugin.version> <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-javadoc-plugin -->
 
<maven-javadoc-plugin.version>3.2.0</maven-javadoc-plugin.version> <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-javadoc-plugin -->
  +
<duplicate-finder-maven-plugin.version>1.4.0</duplicate-finder-maven-plugin.version> <!-- https://mvnrepository.com/artifact/org.basepom.maven/duplicate-finder-maven-plugin -->
 
<findbugs-maven-plugin.version>3.0.5</findbugs-maven-plugin.version> <!-- https://mvnrepository.com/artifact/org.codehaus.mojo/findbugs-maven-plugin -->
 
<findbugs-maven-plugin.version>3.0.5</findbugs-maven-plugin.version> <!-- https://mvnrepository.com/artifact/org.codehaus.mojo/findbugs-maven-plugin -->
 
<maven-checkstyle-plugin.version>3.1.1</maven-checkstyle-plugin.version> <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-checkstyle-plugin -->
 
<maven-checkstyle-plugin.version>3.1.1</maven-checkstyle-plugin.version> <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-checkstyle-plugin -->
<duplicate-finder-maven-plugin.version>1.4.0</duplicate-finder-maven-plugin.version> <!-- https://mvnrepository.com/artifact/org.basepom.maven/duplicate-finder-maven-plugin -->
 
 
<maven-eclipse-plugin.version>2.10</maven-eclipse-plugin.version> <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-eclipse-plugin -->
 
<maven-eclipse-plugin.version>2.10</maven-eclipse-plugin.version> <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-eclipse-plugin -->
 
<swagger-maven-plugin.version>3.1.8</swagger-maven-plugin.version> <!-- https://github.com/kongchen/swagger-maven-plugin -->
 
<swagger-maven-plugin.version>3.1.8</swagger-maven-plugin.version> <!-- https://github.com/kongchen/swagger-maven-plugin -->
Line 1,076: Line 1,082:
 
<!-- For more repositories, refer https://mvnrepository.com/repos -->
 
<!-- For more repositories, refer https://mvnrepository.com/repos -->
 
<repository>
 
<repository>
<id>central1</id>
+
<id>central</id>
<url>http://repo1.maven.org/maven2/</url>
+
<url>https://repo1.maven.org/maven2/</url>
 
<releases>
 
<releases>
 
<updatePolicy>${dependencies.release.updatePolicy}</updatePolicy>
 
<updatePolicy>${dependencies.release.updatePolicy}</updatePolicy>
 
</releases>
 
</releases>
<snapshots>
+
<snapshots><enabled>false</enabled></snapshots>
<enabled>false</enabled>
 
</snapshots>
 
</repository>
 
<repository>
 
<id>central2</id>
 
<url>http://repo2.maven.org/maven2/</url>
 
<releases>
 
<updatePolicy>${dependencies.release.updatePolicy}</updatePolicy>
 
</releases>
 
<snapshots>
 
<enabled>false</enabled>
 
</snapshots>
 
 
</repository>
 
</repository>
  +
    <repository>
  +
      <id>spring-libs-milestone</id>
  +
      <url>https://repo.spring.io/libs-milestone</url>
  +
      <releases><updatePolicy>${dependencies.release.updatePolicy}</updatePolicy><releases>
  +
      <snapshots><enabled>false</enabled></snapshots>
  +
    </repository>
 
<repository>
 
<repository>
 
<id>java.net.public</id>
 
<id>java.net.public</id>
Line 1,101: Line 1,101:
 
<updatePolicy>${dependencies.release.updatePolicy}</updatePolicy>
 
<updatePolicy>${dependencies.release.updatePolicy}</updatePolicy>
 
</releases>
 
</releases>
<snapshots>
+
<snapshots><enabled>true</enabled></snapshots>
<enabled>true</enabled>
 
</snapshots>
 
 
</repository>
 
</repository>
 
<repository>
 
<repository>
Line 1,109: Line 1,107:
 
<name>jcenter</name>
 
<name>jcenter</name>
 
<url>https://jcenter.bintray.com/</url>
 
<url>https://jcenter.bintray.com/</url>
  +
<releases><enabled>false</enabled></releases>
 
</repository>
 
</repository>
 
</repositories>
 
</repositories>
Line 1,114: Line 1,113:
 
<pluginRepositories>
 
<pluginRepositories>
 
<pluginRepository>
 
<pluginRepository>
<id>central1</id>
+
<id>central</id>
<url>http://repo1.maven.org/maven2/</url>
+
<url>https://repo1.maven.org/maven2/</url>
 
<releases>
 
<releases>
 
<updatePolicy>${dependencies.release.updatePolicy}</updatePolicy>
 
<updatePolicy>${dependencies.release.updatePolicy}</updatePolicy>
 
</releases>
 
</releases>
<snapshots>
+
<snapshots><enabled>false</enabled></snapshots>
<enabled>false</enabled>
 
</snapshots>
 
</pluginRepository>
 
<pluginRepository>
 
<id>central2</id>
 
<url>http://repo2.maven.org/maven2/</url>
 
<releases>
 
<updatePolicy>${dependencies.release.updatePolicy}</updatePolicy>
 
</releases>
 
<snapshots>
 
<enabled>false</enabled>
 
</snapshots>
 
 
</pluginRepository>
 
</pluginRepository>
  +
    <pluginRepository>
  +
      <id>spring-plugins</id>
  +
      <url>https://repo.spring.io/plugins-release/</url>
  +
      <releases><updatePolicy>${dependencies.release.updatePolicy}</updatePolicy></releases>
  +
      <snapshots><enabled>false</enabled></snapshots>
  +
    </pluginRepository>
 
</pluginRepositories>
 
</pluginRepositories>
   
Line 1,144: Line 1,137:
 
<reports>
 
<reports>
 
<report>index</report>
 
<report>index</report>
<!-- <report>dependencies</report> -->
 
<!-- <report>project-team</report> -->
 
<!-- <report>mailing-list</report> -->
 
<!-- <report>cim</report> -->
 
<!-- <report>issue-tracking</report> -->
 
<!-- <report>license</report> -->
 
<!-- <report>scm</report> -->
 
 
</reports>
 
</reports>
 
</reportSet>
 
</reportSet>
Line 1,201: Line 1,187:
 
<build>
 
<build>
 
<plugins>
 
<plugins>
  +
<!-- frameworks support -->
 
<plugin>
 
<plugin>
 
<groupId>org.springframework.boot</groupId>
 
<groupId>org.springframework.boot</groupId>
 
<artifactId>spring-boot-maven-plugin</artifactId>
 
<artifactId>spring-boot-maven-plugin</artifactId>
 
</plugin>
 
</plugin>
  +
<plugin>
  +
<groupId>org.web3j</groupId>
  +
<artifactId>web3j-maven-plugin</artifactId>
  +
<version>${web3j-maven-plugin.version}</version>
  +
</plugin>
  +
<!-- core and baseline -->
 
<plugin>
 
<plugin>
 
<groupId>org.basepom.maven</groupId>
 
<groupId>org.basepom.maven</groupId>
Line 1,239: Line 1,232:
 
</plugin>
 
</plugin>
 
<plugin>
 
<plugin>
  +
<!-- https://maven.apache.org/enforcer/maven-enforcer-plugin/ -->
<groupId>com.github.kongchen</groupId>
 
  +
<!-- `enforcer:enforce` at `validate` phase -->
<artifactId>swagger-maven-plugin</artifactId>
 
<version>${swagger-maven-plugin.version}</version>
+
<groupId>org.apache.maven.plugins</groupId>
  +
<artifactId>maven-enforcer-plugin</artifactId>
  +
<version>${maven-enforcer-plugin.version}</version>
 
<executions>
 
<executions>
 
<execution>
 
<execution>
<phase>compile</phase>
+
<id>enforce-java</id>
 
<goals>
 
<goals>
<goal>generate</goal>
+
<goal>enforce</goal>
 
</goals>
 
</goals>
 
<configuration>
 
<configuration>
  +
<!-- For more standard rules, refer http://maven.apache.org/enforcer/enforcer-rules/ -->
<apiSources>
 
<apiSource>
+
<rules>
<springmvc>true</springmvc>
+
<requireJavaVersion>
<locations>
+
<version>${java.version}</version>
<location>myprogram.controllers</location>
+
</requireJavaVersion>
</locations>
+
<requireMavenVersion>
<schemes>
+
<version>3.0</version>
<scheme>http</scheme>
+
</requireMavenVersion>
</schemes>
+
</rules>
<host>localhost:8080</host>
 
<basePath>/myappl/v1</basePath>
 
<info>
 
<title>REST API of My Program</title>
 
<version>v1</version>
 
<description>
 
...
 
</description>
 
</info>
 
<swaggerDirectory>${project.build.directory}/generated/swagger</swaggerDirectory>
 
<swaggerFileName>api</swaggerFileName>
 
<outputFormats>json,yaml</outputFormats>
 
<!-- <templatePath>${basedir}/src/templates/swagger/strapdown.html.hbs</templatePath> -->
 
<!-- <outputPath>${project.build.directory}/generated/swagger/api.html</outputPath> -->
 
<!-- <attachSwaggerArtifact>true</attachSwaggerArtifact> -->
 
<modelConverters>io.swagger.validator.BeanValidator</modelConverters>
 
</apiSource>
 
</apiSources>
 
 
</configuration>
 
</configuration>
 
</execution>
 
</execution>
Line 1,281: Line 1,258:
 
</plugin>
 
</plugin>
 
<plugin>
 
<plugin>
  +
<groupId>org.apache.maven.plugins</groupId>
<!-- For more, refer followings
 
  +
<artifactId>maven-compiler-plugin</artifactId>
https://github.com/swagger-api/swagger-codegen/tree/3.0.0
 
  +
<version>${maven-compiler-plugin.version}</version>
https://github.com/swagger-api/swagger-codegen/tree/3.0.0/modules/swagger-codegen-maven-plugin
 
-->
+
<inherited>true</inherited>
<groupId>io.swagger.codegen.v3</groupId>
+
<configuration>
<artifactId>swagger-codegen-maven-plugin</artifactId>
+
<source>${java.version}</source>
<version>${swagger-codegen-maven-plugin.v3.version}</version>
+
<target>${java.version}</target>
  +
</configuration>
  +
</plugin>
  +
<plugin>
  +
<!-- For more, refer https://maven.apache.org/surefire/maven-surefire-plugin/ -->
  +
<!-- `surefire:test` at `test` phase -->
  +
<groupId>org.apache.maven.plugins</groupId>
  +
<artifactId>maven-surefire-plugin</artifactId>
  +
<version>${maven-surefire-plugin.version}</version>
  +
</plugin>
  +
<plugin>
  +
<!-- https://maven.apache.org/plugins/maven-jar-plugin/ -->
  +
<!-- `jar:jar` at `package` phase -->
  +
<groupId>org.apache.maven.plugins</groupId>
  +
<artifactId>maven-jar-plugin</artifactId>
  +
<version>${maven-jar-plugin.version}</version>
  +
<configuration>
  +
<!-- For more on Maven archiver, refer http://maven.apache.org/shared/maven-archiver/index.html -->
  +
<archive>
  +
<addMavenDescriptor>false</addMavenDescriptor>
  +
<forced>true</forced>
  +
<index>true</index>
  +
<manifest>
  +
<addClasspath>false</addClasspath>
  +
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
  +
<addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
  +
<addExtensions>false</addExtensions>
  +
<classpathLayoutType>simple</classpathLayoutType>
  +
</manifest>
  +
<manifestEntries>
  +
<Source-Revision>${project.svn.revision}</Source-Revision>
  +
</manifestEntries>
  +
</archive>
  +
</configuration>
  +
</plugin>
  +
<!-- reporting -->
  +
<plugin>
  +
<groupId>org.apache.maven.plugins</groupId>
  +
<artifactId>maven-site-plugin</artifactId>
  +
<version>${maven-site-plugin.version}</version>
  +
<dependencies>
  +
<dependency>
  +
<groupId>org.apache.maven.wagon</groupId>
  +
<artifactId>wagon-ssh</artifactId>
  +
<version>2.12</version>
  +
</dependency>
  +
</dependencies>
  +
</plugin>
  +
<plugin>
  +
<!-- https://maven.apache.org/plugins/maven-javadoc-plugin/ -->
  +
<groupId>org.apache.maven.plugins</groupId>
  +
<artifactId>maven-javadoc-plugin</artifactId>
  +
<version>${maven-javadoc-plugin.version}</version>
  +
<configuration>
  +
<javadocExecutable>${java.home}/bin/javadoc</javadocExecutable>
  +
<!-- <javadocVersion>${java.version}</javadocVersion> -->
  +
<source>${java.version}</source>
  +
<maxmemory>256m</maxmemory>
  +
<!-- causes error with JDK 8 <additionalJOption>-Xms128m</additionalJOption> -->
  +
<failOnError>false</failOnError>
  +
<attach>true</attach> <!-- for `javadoc:jar`, refer https://maven.apache.org/plugins/maven-javadoc-plugin/jar-mojo.html#attach -->
  +
<docencoding>${project.reporting.outputEncoding}</docencoding>
  +
<encoding>${project.build.sourceEncoding}</encoding>
  +
<doctitle>${project.name} ${project.version} API</doctitle>
  +
<windowtitle>${project.name} ${project.version} API</windowtitle>
  +
<links>
  +
<link>https://docs.oracle.com/javase/8/docs/api/</link>
  +
<link>https://docs.oracle.com/javaee/7/api/</link>
  +
<link>https://docs.spring.io/spring/docs/5.1.x/javadoc-api/</link>
  +
<link>https://docs.spring.io/spring-boot/docs/2.1.x/api/</link>
  +
<link>http://www.javadoc.io/doc/com.google.code.findbugs/jsr305/${jsr305.version}</link>
  +
<link>http://docs.jboss.org/hibernate/beanvalidation/spec/2.0/api/</link>
  +
<link>http://docs.jboss.org/hibernate/validator/6.1/api/</link>
  +
<link>http://www.javadoc.io/doc/org.slf4j/slf4j-api/${slf4j.version}/</link>
  +
<link>https://junit.org/junit5/docs/${junit5.version}/api/</link>
  +
<link>http://commons.apache.org/proper/commons-lang/javadocs/api-${commons-lang3.version}/</link>
  +
<link>http://commons.apache.org/proper/commons-collections/javadocs/api-${commons-collections4.version}/</link>
  +
<link>https://javadoc.io/doc/org.web3j/core/${web3j.version}</link>
  +
<link>https://javadoc.io/doc/org.web3j/abi/${web3j.version}</link>
  +
<link>https://javadoc.io/doc/org.web3j/crypto/${web3j.version}</link>
  +
<link>https://javadoc.io/doc/org.web3j/utils/${web3j.version}</link>
  +
</links>
  +
<show>protected</show>
  +
<splitindex>true</splitindex>
  +
<stylesheet>java</stylesheet> <!-- 'java' (default) or 'maven' -->
  +
</configuration>
 
<executions>
 
<executions>
 
<execution>
 
<execution>
<id>generate-rest-api-doc-v3</id>
+
<id>javadoc-jar</id>
<phase>process-classes</phase>
+
<phase>prepare-package</phase> <!-- or 'package' -->
 
<goals>
 
<goals>
<goal>generate</goal>
+
<goal>jar</goal>
 
</goals>
 
</goals>
<configuration>
 
<inputSpec>${project.build.directory}/generated/swagger/api.json</inputSpec>
 
<language>html2</language>
 
<output>${project.build.directory}/generated/swagger/html2</output>
 
<generateApis>true</generateApis>
 
</configuration>
 
 
</execution>
 
</execution>
 
</executions>
 
</executions>
 
</plugin>
 
</plugin>
 
<plugin>
 
<plugin>
  +
<!-- For more, refer http://gleclaire.github.io/findbugs-maven-plugin/ -->
<groupId>org.web3j</groupId>
 
<artifactId>web3j-maven-plugin</artifactId>
+
<groupId>org.codehaus.mojo</groupId>
<version>${web3j-maven-plugin.version}</version>
+
<artifactId>findbugs-maven-plugin</artifactId>
  +
<version>${findbugs-maven-plugin.version}</version>
  +
<configuration>
  +
<effort>Max</effort>
  +
<threshold>Low</threshold>
  +
<!-- findbugs-maven-plugin doesn't provide aggregate goal or mode -->
  +
<includeFilterFile>src/config/findbugs/findbugs-exclude.xml</includeFilterFile>
  +
<plugins>
  +
<plugin>
  +
<groupId>com.mebigfatguy.fb-contrib</groupId>
  +
<artifactId>fb-contrib</artifactId>
  +
<version>6.8.3</version>
  +
</plugin>
  +
</plugins>
  +
</configuration>
  +
</plugin>
  +
<plugin>
  +
<groupId>org.apache.maven.plugins</groupId>
  +
<artifactId>maven-checkstyle-plugin</artifactId>
  +
<version>${maven-checkstyle-plugin.version}</version>
  +
</plugin>
  +
<!-- tools support -->
  +
<plugin>
  +
<!-- http://maven.apache.org/plugins/maven-eclipse-plugin/eclipse-mojo.html -->
  +
<groupId>org.apache.maven.plugins</groupId>
  +
<artifactId>maven-eclipse-plugin</artifactId>
  +
<version>${maven-eclipse-plugin.version}</version>
  +
<configuration>
  +
<!-- the next two item doesn't work on m2e. m2e has its own confgiruation in Eclipse preferences -->
  +
<downloadJavadocs>true</downloadJavadocs>
  +
<downloadSources>true</downloadSources>
  +
<forceRecheck>false</forceRecheck>
  +
</configuration>
  +
</plugin>
  +
<plugin>
  +
<groupId>org.eclipse.m2e</groupId>
  +
<artifactId>lifecycle-mapping</artifactId>
  +
<version>1.0.0</version>
  +
<configuration>
  +
<lifecycleMappingMetadata>
  +
<pluginExecutions>
  +
<pluginExecution>
  +
<pluginExecutionFilter>
  +
<groupId>org.apache.maven.plugins</groupId>
  +
<artifactId>maven-dependency-plugin</artifactId>
  +
<versionRange>[1.0.0,)</versionRange>
  +
<goals><goal>copy-dependencies</goal></goals>
  +
</pluginExecutionFilter>
  +
<action><ignore /></action>
  +
</pluginExecution>
  +
<pluginExecution>
  +
<pluginExecutionFilter>
  +
<groupId>org.apache.maven.plugins</groupId>
  +
<artifactId>maven-antrun-plugin</artifactId>
  +
<versionRange>[1.0.0,)</versionRange>
  +
<goals><goal>run</goal></goals>
  +
</pluginExecutionFilter>
  +
<action><ignore /></action>
  +
</pluginExecution>
  +
<pluginExecution>
  +
<pluginExecutionFilter>
  +
<groupId>org.codehaus.mojo</groupId>
  +
<artifactId>aspectj-maven-plugin</artifactId>
  +
<versionRange>[1.0.0,)</versionRange>
  +
<goals>
  +
<goal>compile</goal>
  +
<goal>test-compile</goal>
  +
</goals>
  +
</pluginExecutionFilter>
  +
<action><ignore /></action>
  +
</pluginExecution>
  +
<pluginExecution>
  +
<pluginExecutionFilter>
  +
<groupId>org.codehaus.mojo</groupId>
  +
<artifactId>build-helper-maven-plugin</artifactId>
  +
<versionRange>[1.0.0,)</versionRange>
  +
<goals><goal>parse-version</goal></goals>
  +
</pluginExecutionFilter>
  +
<action><ignore /></action>
  +
</pluginExecution>
  +
<pluginExecution>
  +
<pluginExecutionFilter>
  +
<groupId>net.alchim31.maven</groupId>
  +
<artifactId>scala-maven-plugin</artifactId>
  +
<versionRange>[1.0.0,)</versionRange>
  +
<goals>
  +
<goal>add-source</goal>
  +
<goal>compile</goal>
  +
<goal>testCompile</goal>
  +
</goals>
  +
</pluginExecutionFilter>
  +
<action><ignore /></action>
  +
</pluginExecution>
  +
<pluginExecution>
  +
<pluginExecutionFilter>
  +
<groupId>io.swagger.core.v3</groupId>
  +
<artifactId>swagger-maven-plugin</artifactId>
  +
<versionRange>[1.0.0,)</versionRange>
  +
<goals><goal>resolve</goal></goals>
  +
</pluginExecutionFilter>
  +
<action>
  +
<ignore><message>swagger-maven-plugin (goal "resolve") is ignored by m2e.</message></ignore>
  +
</action>
  +
</pluginExecution>
  +
<pluginExecution>
  +
<pluginExecutionFilter>
  +
<groupId>io.swagger.codegen.v3</groupId>
  +
<artifactId>swagger-codegen-maven-plugin</artifactId>
  +
<versionRange>[1.0.0,)</versionRange>
  +
<goals><goal>generate</goal></goals>
  +
</pluginExecutionFilter>
  +
<action>
  +
<ignore>
  +
<message>swagger-codegen-maven-plugin (goal "generate") is ignored by m2e.</message>
  +
</ignore>
  +
</action>
  +
</pluginExecution>
  +
<pluginExecution>
  +
<pluginExecutionFilter>
  +
<groupId>com.github.kongchen</groupId>
  +
<artifactId>swagger-maven-plugin</artifactId>
  +
<versionRange>[1.0.0,)</versionRange>
  +
<goals><goal>generate</goal></goals>
  +
</pluginExecutionFilter>
  +
<action>
  +
<ignore>
  +
<message>wagger-maven-plugin (goal "generate") is ignored by m2e.</message>
  +
</ignore>
  +
</action>
  +
</pluginExecution>
  +
</pluginExecutions>
  +
</lifecycleMappingMetadata>
  +
</configuration>
 
</plugin>
 
</plugin>
 
</plugins>
 
</plugins>
<pluginManagement>
 
<plugins>
 
<!-- core -->
 
<plugin>
 
<groupId>org.apache.maven.plugins</groupId>
 
<artifactId>maven-compiler-plugin</artifactId>
 
<version>${maven-compiler-plugin.version}</version>
 
<inherited>true</inherited>
 
<configuration>
 
<source>${java.version}</source>
 
<target>${java.version}</target>
 
</configuration>
 
</plugin>
 
<plugin>
 
<groupId>org.apache.maven.plugins</groupId>
 
<artifactId>maven-site-plugin</artifactId>
 
<version>${maven-site-plugin.version}</version>
 
<dependencies>
 
<dependency>
 
<groupId>org.apache.maven.wagon</groupId>
 
<artifactId>wagon-ssh</artifactId>
 
<version>2.12</version>
 
</dependency>
 
</dependencies>
 
</plugin>
 
<!-- sources -->
 
<plugin>
 
<!-- For more, refer followings
 
https://github.com/swagger-api/swagger-codegen
 
https://github.com/swagger-api/swagger-codegen/tree/master/modules/swagger-codegen-maven-plugin
 
-->
 
<groupId>io.swagger</groupId>
 
<artifactId>swagger-codegen-maven-plugin</artifactId>
 
<version>${swagger-codegen-maven-plugin.version}</version>
 
</plugin>
 
<!-- packaging -->
 
<plugin>
 
<groupId>org.apache.maven.plugins</groupId>
 
<artifactId>maven-jar-plugin</artifactId>
 
<version>${maven-jar-plugin.version}</version>
 
<configuration>
 
<!-- For more on Maven archiver, refer http://maven.apache.org/shared/maven-archiver/index.html -->
 
<archive>
 
<addMavenDescriptor>false</addMavenDescriptor>
 
<forced>true</forced>
 
<index>true</index>
 
<manifest>
 
<addClasspath>false</addClasspath>
 
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
 
<addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
 
<addExtensions>false</addExtensions>
 
<classpathLayoutType>simple</classpathLayoutType>
 
</manifest>
 
<manifestEntries>
 
<Source-Revision>${project.svn.revision}</Source-Revision>
 
</manifestEntries>
 
</archive>
 
</configuration>
 
</plugin>
 
<!-- reporting -->
 
<plugin>
 
<groupId>org.apache.maven.plugins</groupId>
 
<artifactId>maven-javadoc-plugin</artifactId>
 
<version>${maven-javadoc-plugin.version}</version>
 
<configuration>
 
<additionalJOptions>
 
<!-- causes error with JDK 8 <additionalJOption>-Xms128m</additionalJOption> -->
 
</additionalJOptions>
 
<failOnError>false</failOnError>
 
<docencoding>${project.reporting.outputEncoding}</docencoding>
 
<encoding>${project.build.sourceEncoding}</encoding>
 
<doctitle>${project.name} ${project.version} API</doctitle>
 
<windowtitle>${project.name} ${project.version} API</windowtitle>
 
<links>
 
<link>https://docs.oracle.com/javase/9/docs/api/</link>
 
<link>https://docs.oracle.com/javaee/7/api/</link>
 
<link>http://www.javadoc.io/doc/com.google.code.findbugs/jsr305/${jsr305.version}</link>
 
<link>http://docs.jboss.org/hibernate/beanvalidation/spec/2.0/api/</link>
 
<link>http://docs.jboss.org/hibernate/validator/6.0/api/</link>
 
<link>https://www.slf4j.org/apidocs/</link>
 
<link>http://junit.org/junit4/javadoc/${junit.version}/</link>
 
<link>http://commons.apache.org/proper/commons-lang/javadocs/api-${commons-lang3.version}/</link>
 
<link>http://commons.apache.org/proper/commons-collections/javadocs/api-release/</link>
 
<link>http://docs.swagger.io/swagger-core/v1.5.X/apidocs/</link>
 
<link>http://springfox.github.io/springfox/javadoc/${springfox-swagger2.version}/</link>
 
<link>https://docs.spring.io/spring/docs/5.1.x/javadoc-api/</link>
 
<link>https://docs.spring.io/spring-boot/docs/2.1.x/api/</link>
 
</links>
 
<show>protected</show>
 
<splitindex>true</splitindex>
 
</configuration>
 
</plugin>
 
<plugin>
 
<!-- For more, refer http://gleclaire.github.io/findbugs-maven-plugin/ -->
 
<groupId>org.codehaus.mojo</groupId>
 
<artifactId>findbugs-maven-plugin</artifactId>
 
<version>${findbugs-maven-plugin.version}</version>
 
<configuration>
 
<effort>Max</effort>
 
<threshold>Low</threshold>
 
<!-- findbugs-maven-plugin doesn't provide aggregate goal or mode -->
 
<includeFilterFile>src/config/findbugs/findbugs-exclude.xml</includeFilterFile>
 
<plugins>
 
<plugin>
 
<groupId>com.mebigfatguy.fb-contrib</groupId>
 
<artifactId>fb-contrib</artifactId>
 
<version>6.8.3</version>
 
</plugin>
 
</plugins>
 
</configuration>
 
</plugin>
 
<plugin>
 
<groupId>org.apache.maven.plugins</groupId>
 
<artifactId>maven-checkstyle-plugin</artifactId>
 
<version>${maven-checkstyle-plugin.version}</version>
 
</plugin>
 
<!-- tools supporting -->
 
<plugin>
 
<!-- http://maven.apache.org/plugins/maven-eclipse-plugin/eclipse-mojo.html -->
 
<groupId>org.apache.maven.plugins</groupId>
 
<artifactId>maven-eclipse-plugin</artifactId>
 
<version>${maven-eclipse-plugin.version}</version>
 
<configuration>
 
<!-- the next two item doesn't work on m2e. m2e has its own confgiruation in Eclipse preferences -->
 
<downloadJavadocs>true</downloadJavadocs>
 
<downloadSources>true</downloadSources>
 
<forceRecheck>false</forceRecheck>
 
</configuration>
 
</plugin>
 
<plugin>
 
<groupId>org.eclipse.m2e</groupId>
 
<artifactId>lifecycle-mapping</artifactId>
 
<version>1.0.0</version>
 
<configuration>
 
<lifecycleMappingMetadata>
 
<pluginExecutions>
 
<pluginExecution>
 
<pluginExecutionFilter>
 
<groupId>org.apache.maven.plugins</groupId>
 
<artifactId>maven-dependency-plugin</artifactId>
 
<versionRange>[1.0.0,)</versionRange>
 
<goals>
 
<goal>copy-dependencies</goal>
 
</goals>
 
</pluginExecutionFilter>
 
<action>
 
<ignore />
 
</action>
 
</pluginExecution>
 
<pluginExecution>
 
<pluginExecutionFilter>
 
<groupId>org.apache.maven.plugins</groupId>
 
<artifactId>maven-antrun-plugin</artifactId>
 
<versionRange>[1.0.0,)</versionRange>
 
<goals>
 
<goal>run</goal>
 
</goals>
 
</pluginExecutionFilter>
 
<action>
 
<ignore />
 
</action>
 
</pluginExecution>
 
<pluginExecution>
 
<pluginExecutionFilter>
 
<groupId>org.codehaus.mojo</groupId>
 
<artifactId>aspectj-maven-plugin</artifactId>
 
<versionRange>[1.0.0,)</versionRange>
 
<goals>
 
<goal>compile</goal>
 
<goal>test-compile</goal>
 
</goals>
 
</pluginExecutionFilter>
 
<action>
 
<ignore />
 
</action>
 
</pluginExecution>
 
<pluginExecution>
 
<pluginExecutionFilter>
 
<groupId>org.codehaus.mojo</groupId>
 
<artifactId>build-helper-maven-plugin</artifactId>
 
<versionRange>[1.0.0,)</versionRange>
 
<goals>
 
<goal>parse-version</goal>
 
</goals>
 
</pluginExecutionFilter>
 
<action>
 
<ignore />
 
</action>
 
</pluginExecution>
 
<pluginExecution>
 
<pluginExecutionFilter>
 
<groupId>net.alchim31.maven</groupId>
 
<artifactId>scala-maven-plugin</artifactId>
 
<versionRange>[1.0.0,)</versionRange>
 
<goals>
 
<goal>add-source</goal>
 
<goal>compile</goal>
 
<goal>testCompile</goal>
 
</goals>
 
</pluginExecutionFilter>
 
<action>
 
<ignore />
 
</action>
 
</pluginExecution>
 
<pluginExecution>
 
<pluginExecutionFilter>
 
<groupId>io.swagger.core.v3</groupId>
 
<artifactId>swagger-maven-plugin</artifactId>
 
<versionRange>[1.0.0,)</versionRange>
 
<goals>
 
<goal>resolve</goal>
 
</goals>
 
</pluginExecutionFilter>
 
<action>
 
<ignore>
 
<message>swagger-maven-plugin (goal "resolve") is ignored by m2e.</message>
 
</ignore>
 
</action>
 
</pluginExecution>
 
<pluginExecution>
 
<pluginExecutionFilter>
 
<groupId>io.swagger.codegen.v3</groupId>
 
<artifactId>swagger-codegen-maven-plugin</artifactId>
 
<versionRange>[1.0.0,)</versionRange>
 
<goals>
 
<goal>generate</goal>
 
</goals>
 
</pluginExecutionFilter>
 
<action>
 
<ignore>
 
<message>swagger-codegen-maven-plugin (goal "generate") is ignored by m2e.</message>
 
</ignore>
 
</action>
 
</pluginExecution>
 
<pluginExecution>
 
<pluginExecutionFilter>
 
<groupId>com.github.kongchen</groupId>
 
<artifactId>swagger-maven-plugin</artifactId>
 
<versionRange>[1.0.0,)</versionRange>
 
<goals>
 
<goal>generate</goal>
 
</goals>
 
</pluginExecutionFilter>
 
<action>
 
<ignore>
 
<message>wagger-maven-plugin (goal "generate") is ignored by m2e.</message>
 
</ignore>
 
</action>
 
</pluginExecution>
 
</pluginExecutions>
 
</lifecycleMappingMetadata>
 
</configuration>
 
</plugin>
 
</plugins>
 
</pluginManagement>
 
 
</build>
 
</build>
   
Line 1,588: Line 1,521:
 
<dependency>
 
<dependency>
 
<!-- Hibernate Validator -->
 
<!-- Hibernate Validator -->
<groupId>org.hibernate</groupId>
+
<groupId>org.hibernate.validator</groupId>
 
<artifactId>hibernate-validator</artifactId>
 
<artifactId>hibernate-validator</artifactId>
 
<version>${hibernate-validator.version}</version>
 
<version>${hibernate-validator.version}</version>
Line 1,661: Line 1,594:
 
<artifactId>spring-boot-starter-web</artifactId>
 
<artifactId>spring-boot-starter-web</artifactId>
 
</dependency>
 
</dependency>
<!-- <dependency> -->
 
<!-- <groupId>org.springframework.boot</groupId> -->
 
<!-- <artifactId>spring-boot-starter-webflux</artifactId> -->
 
<!-- </dependency> -->
 
 
<dependency>
 
<dependency>
 
<groupId>org.springframework.boot</groupId>
 
<groupId>org.springframework.boot</groupId>
Line 1,687: Line 1,616:
 
<groupId>junit</groupId>
 
<groupId>junit</groupId>
 
<artifactId>junit</artifactId>
 
<artifactId>junit</artifactId>
  +
</exclusion>
  +
<exclusion>
  +
<groupId>org.junit.vintage</groupId>
  +
<artifactId>junit-vintage-engine</artifactId>
 
</exclusion>
 
</exclusion>
 
</exclusions>
 
</exclusions>
Line 1,725: Line 1,658:
 
<artifactId>core</artifactId>
 
<artifactId>core</artifactId>
 
<version>${web3j.version}</version>
 
<version>${web3j.version}</version>
  +
<exclusions>
  +
<exclusion>
  +
<groupId>com.squareup.okhttp3</groupId>
  +
<artifactId>okhttp</artifactId>
  +
</exclusion>
  +
<exclusion>
  +
<groupId>com.squareup.okhttp3</groupId>
  +
<artifactId>logging-interceptor</artifactId>
  +
</exclusion>
  +
</exclusions>
 
</dependency>
 
</dependency>
 
<dependency>
 
<dependency>
Line 1,732: Line 1,675:
 
</dependency>
 
</dependency>
 
<dependency>
 
<dependency>
<groupId>org.web3j</groupId>
+
<groupId>com.squareup.okhttp3</groupId>
<artifactId>pantheon</artifactId>
+
<artifactId>okhttp</artifactId>
<version>4.5.1</version>
+
<version>${okhttp.version}</version>
  +
</dependency>
  +
<dependency>
  +
<groupId>com.squareup.okhttp3</groupId>
  +
<artifactId>logging-interceptor</artifactId>
  +
<version>${okhttp.version}</version>
 
</dependency>
 
</dependency>
 
</dependencies>
 
</dependencies>
Line 1,759: Line 1,707:
 
[[File:Maven-buildlifecycle.png|border]]
 
[[File:Maven-buildlifecycle.png|border]]
 
*[http://maven.apache.org/guides/introduction/introduction-to-plugin-prefix-mapping.html Plugin Prefix Resolution]
 
*[http://maven.apache.org/guides/introduction/introduction-to-plugin-prefix-mapping.html Plugin Prefix Resolution]
 
   
 
===Guidelines for multi-moduled Maven project===
 
===Guidelines for multi-moduled Maven project===
Line 2,252: Line 2,199:
   
 
</syntaxhighlight>
 
</syntaxhighlight>
  +
  +
===Printing details of goals in a specific plugin===
  +
  +
Use [http://maven.apache.org/plugins/maven-help-plugin/ <tt>help</tt> plugin] with <tt>detail</tt> and <tt>plugin</tt> options
  +
  +
<syntaxhighlight lang='bash' enclose='div'>
  +
$ mvn help:describe -Dplugin=io.swagger.codegen.v3:swagger-codegen-maven-plugin -Ddetail=true
  +
</syntaxhighlight>
  +
  +
* [https://stackoverflow.com/questions/1674524/how-to-display-a-list-of-available-goals How to display a list of available goals?] (Nov 4 '09)
   
 
===Dependency on local library not in Maven repository and with no POM file===
 
===Dependency on local library not in Maven repository and with no POM file===
  +
 
Sometimes your project may have dependency on a JAR file that is not registered to any of Maven repositories and so have no it's own POM file. In this case, you can use <systemPath> element to specify your module's dependency on it.
 
Sometimes your project may have dependency on a JAR file that is not registered to any of Maven repositories and so have no it's own POM file. In this case, you can use <systemPath> element to specify your module's dependency on it.
   
Line 2,277: Line 2,235:
   
 
For more refer this page : [http://maven.apache.org/plugins/maven-resources-plugin/resources-mojo.html#escapeString http://maven.apache.org/plugins/maven-resources-plugin/resources-mojo.html#escapeString]
 
For more refer this page : [http://maven.apache.org/plugins/maven-resources-plugin/resources-mojo.html#escapeString http://maven.apache.org/plugins/maven-resources-plugin/resources-mojo.html#escapeString]
  +
  +
===Deploying Javadoc JAR file along with===
  +
  +
Add configuration for Maven deploy plugin including target repository and path to JAR file.
  +
  +
<syntaxhighlight lang='xml' enclose='div'>
  +
  +
<plugin>
  +
<groupId>org.apache.maven.plugins</groupId>
  +
<artifactId>maven-deploy-plugin</artifactId>
  +
<version>${maven-deploy-plugin.version}</version>
  +
<configuration>
  +
<file>${project.build.directory}/${project.artifactId}-${project.version}.jar</file>
  +
<!-- specify credentials to access the following repoisoty into settings file ('~/.m2/settings.xml') -->
  +
<repositoryId>skcc-bc-release</repositoryId>
  +
<url>https://bcrepo.skcc.com/repository/sk-maven-releases</url>
  +
<pomFile>${project.basedir}/pom.xml</pomFile>
  +
<javadoc>${project.build.directory}/${project.artifactId}-${project.version}-javadoc.jar</javadoc>
  +
</configuration>
  +
</plugin>
  +
  +
</syntaxhighlight>
  +
  +
  +
Execute '<tt>javadoc:jar</tt>' goal first and execute '<tt>deploy:deploy-file</tt>' goal instead of '<tt>deploy</tt>'.
  +
  +
<syntaxhighlight lang='bash' enclose='div'>
  +
  +
$ mvn javadoc:jar
  +
  +
...
  +
  +
$ mvn deploy:deploy-file
  +
  +
...
  +
</syntaxhighlight>
   
 
===Working with Subversion working copy in format of ver. 1.7===
 
===Working with Subversion working copy in format of ver. 1.7===
  +
 
The default configuration of [http://maven.apache.org/plugins/maven-release-plugin/ Maven release plugin](maven-release-plugin) up to ver. 2.2.2 or [http://maven.apache.org/scm/maven-scm-plugin/ Maven scm plugin](maven-scm-plugin) up to ver. 1.6 can't work correctly with Subversion working copy in format of ver. 1.7.<br />To solve this problem, you should override the configuration of release plugin or scm plugin to use maven-scm-provider-svnjava and svnkit 1.7.
 
The default configuration of [http://maven.apache.org/plugins/maven-release-plugin/ Maven release plugin](maven-release-plugin) up to ver. 2.2.2 or [http://maven.apache.org/scm/maven-scm-plugin/ Maven scm plugin](maven-scm-plugin) up to ver. 1.6 can't work correctly with Subversion working copy in format of ver. 1.7.<br />To solve this problem, you should override the configuration of release plugin or scm plugin to use maven-scm-provider-svnjava and svnkit 1.7.
   
Line 2,349: Line 2,344:
   
 
For more, refer the followings,
 
For more, refer the followings,
  +
 
*[http://mvnrepository.com/artifact/com.google.code.maven-scm-provider-svnjava/maven-scm-provider-svnjava Maven SCM Subversion Provider - Java Impl.]
 
*[http://mvnrepository.com/artifact/com.google.code.maven-scm-provider-svnjava/maven-scm-provider-svnjava Maven SCM Subversion Provider - Java Impl.]
 
*[http://svnkit.com/download.php svnkit download]
 
*[http://svnkit.com/download.php svnkit download]

Latest revision as of 08:29, 6 November 2023

Overview

Maven Repositories

Title Type Repository Remarks
Central Repository https://repo1.maven.org/maven2/
Java.net snapshots and releases https://maven.java.net/content/groups/public/
releases only https://maven.java.net/service/local/staging/deploy/maven2/
snapshots only https://maven.java.net/content/repositories/snapshots/
Apache Maven Repository search https://repository.apache.org/
public https://repository.apache.org/content/groups/public
snapshots https://repository.apache.org/content/groups/snapshots
JBoss Maven Repository https://repository.jboss.org/nexus/content/repositories/ JBoss Maven Repository
Spring IO Maven Repositories lib-milestone https://repo.spring.io/libs-milestone
libs-release http://repo.spring.io/libs-release
libs-snapshot http://repo.spring.io/libs-snapshot
plugins-release http://repo.spring.io/plugins-release
plugins-snapshot http://repo.spring.io/plugins-snapshot
Google http://google-maven-repository.googlecode.com/svn/repository/
SUN Jars Repository http://maven.apache.org/guides/mini/guide-coping-with-sun-jars.html
Maven Repository of eclipse.org http://maven.eclipse.org/nexus/
DocBook Repository http://docbook.sourceforge.net/maven/repository/ http://wiki.docbook.org/topic/Maven

Maven Plug-ins

Category Plugin Description Documentation Remarks
Utilities Resource Plugin
Build Helper Plugin
Build Number Plugin Designed to get a unique build number for each time you build your project.
Versions Plugin Manages the versions of artifacts in a project's POM.
Timestamp Plugin Provides formatted timestamps for maven builds.
Properties Plugin Provides goals to read and write properties from and to files.
Properties Plugin Provides goals to read and write properties from files.
Replacer Plugin Replace tokens within a file with a given value and fully supports regular expressions.
Expression Plugin Allow users to resolve expressions interactively.
Source configuration management tools support SVN Revision Number Plugin Retrieves the revision number and the status of the Subversion working copy directory and sets project properties that can be used later in the build process. svnkit-1.7.0-SNAPSHOT
Software platforms support Android Maven Plugin
Maven support M2Eclipse provides tight integration for Apache Maven into the IDE
Eclipse Plugin
Tycho a set of Maven plugins and extensions for building Eclipse plugins and OSGi bundles with Maven. Tycho Wiki
P2 Plugin responsible for the automation of dependency management in the Eclipse RCP environment.
m2e-android Maven Eclipse (m2e) plug-in that adds maven support for the Android Developer Tools (ADT) and the Andmore Project.

Code analysis tools support

  • PMD Plugin
    • http://maven.apache.org/plugins/maven-pmd-plugin/
    • allows you to automatically run the PMD code analysis tool on your project's source code and generate a site report with its results.
    • also supports the separate Copy/Paste Detector tool (or CPD) distributed with PMD.

Documentation tools support

Continuous integration tools support

Collaboration tools support

Packaging tools support

Programming languages support

Application frameworks support

Application servers support

misc

Maven Skins

Readings

Sonatype books

Multi module project

Testing

Reporting

Maven assemblies

Maven snapshot repositories

Deployment process and security

Site process

Release process

Property and Interpolation

  • Built-in properties
project.groupId
project.artifactId
project.version
project.name
project.description
project.baseUri
project.build.sourceDirectory     // src/main/java
project.build.scriptSourceDirectory   // src/main/script
project.build.testSourceDirectory     // src/test/java
project.build.outputDirectory         // target/classes
project.build.testOutputDirectory     // target/test-classes
project.build.directory               // target
project.reporting.outputDirectory
project.parent.basedir
currentYear

env.PATH
env.HOME
env.JAVA_HOME

m2e

misc

Examples

Tips and Tricks

Simple POM

<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>
  <groupId>foo</groupId>
  <artifactId>foo-baz</artifactId>
  <version>0.0.1-SNAPSHOT</version>

  <name>Project Name</name>
  <description>...</description>

  <developers>
    <developer>
      <id>3rdstage</id>
      <name>Sangmoon Oh</name>
      <email>halfface@chollian.net</email>
    </developer>
  </developers>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <!-- control build behavior -->
    <skipTests>false</skipTests>
    <maven.deploy.skip>true</maven.deploy.skip>
    <maven.site.skip>false</maven.site.skip> <!-- consumed by maven-site-plugin -->
    <maven.site.deploy.skip>true</maven.site.deploy.skip> <!-- consumed by maven-site-plugin -->
    <exec.skip>false</exec.skip> <!-- consumed by exec-maven-plugin -->
    <generateProjectInfo>false</generateProjectInfo> <!-- consumed by maven-site-plugin -->
    <generateReports>true</generateReports> <!-- consumed by maven-site-plugin -->
    <maven.javadoc.skip>false</maven.javadoc.skip>
    <maven.javadoc.failOnWarnings>false</maven.javadoc.failOnWarnings>
    <swagger-codegen.skip>true</swagger-codegen.skip>
    <doclint>none</doclint>
    <findbugs.skip>true</findbugs.skip>
    <checkstyle.skip>true</checkstyle.skip>
    <dependencies.release.updatePolicy>never</dependencies.release.updatePolicy> <!-- always | daily | never -->
    <!-- versions for Java SDK and dependencies -->
    <java.version>11</java.version>
    <jsr305.version>3.0.2</jsr305.version> <!-- https://mvnrepository.com/artifact/com.google.code.findbugs/jsr305 -->
    <validation-api.version>2.0.1.Final</validation-api.version> <!-- https://mvnrepository.com/artifact/javax.validation/validation-api -->
    <hibernate-validator.version>6.1.2.Final</hibernate-validator.version> <!-- https://mvnrepository.com/artifact/org.hibernate.validator/hibernate-validator -->
    <slf4j.version>1.7.30</slf4j.version> <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
    <logback.version>1.2.3</logback.version> <!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-classic -->
    <janino.version>3.1.0</janino.version> <!-- https://mvnrepository.com/artifact/org.codehaus.janino/janino -->
    <junit5.version>5.6.1</junit5.version> <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-engine -->
    <testng.version>6.9.10</testng.version>
    <mockito.version>3.3.3</mockito.version> <!-- https://mvnrepository.com/artifact/org.mockito -->
    <commons-lang3.version>3.9</commons-lang3.version> <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
    <commons-validator.version>1.6</commons-validator.version> <!-- https://mvnrepository.com/artifact/commons-validator/commons-validator -->
    <commons-collections4.version>4.4</commons-collections4.version> <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-collections4 -->
    <typesafe-config.version>1.3.1</typesafe-config.version>
    <swagger.version>2.0.8</swagger.version> <!-- https://mvnrepository.com/artifact/io.swagger.core.v3 -->
    <springfox-swagger2.version>2.9.2</springfox-swagger2.version> <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 -->
    <mybatis.version>3.5.1</mybatis.version> <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
    <jjwt.version>0.10.7</jjwt.version> <!-- https://mvnrepository.com/artifact/io.jsonwebtoken -->
    <web3j.version>4.5.17</web3j.version> <!-- https://mvnrepository.com/artifact/org.web3j -->
    <okhttp.version>4.3.1</okhttp.version>
    <!-- version for Maven plugins -->
    <maven-enforcer-plugin.version>3.0.0-M3</maven-enforcer-plugin.version> <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-enforcer-plugin -->
    <maven-compiler-plugin.version>3.10.1</maven-compiler-plugin.version> <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-compiler-plugin -->
    <maven-surefire-plugin.version>2.22.2</maven-surefire-plugin.version> <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-surefire-plugin -->
    <maven-site-plugin.version>3.9.0</maven-site-plugin.version> <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-site-plugin -->
    <maven-jar-plugin.version>3.2.0</maven-jar-plugin.version> <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-jar-plugin -->
    <maven-javadoc-plugin.version>3.2.0</maven-javadoc-plugin.version> <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-javadoc-plugin -->
    <findbugs-maven-plugin.version>3.0.5</findbugs-maven-plugin.version> <!-- https://mvnrepository.com/artifact/org.codehaus.mojo/findbugs-maven-plugin -->
    <maven-checkstyle-plugin.version>3.1.1</maven-checkstyle-plugin.version> <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-checkstyle-plugin -->
    <duplicate-finder-maven-plugin.version>1.4.0</duplicate-finder-maven-plugin.version> <!-- https://mvnrepository.com/artifact/org.basepom.maven/duplicate-finder-maven-plugin -->
    <maven-eclipse-plugin.version>2.10</maven-eclipse-plugin.version> <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-eclipse-plugin -->
    <web3j-maven-plugin.version>4.5.11</web3j-maven-plugin.version> <!-- https://mvnrepository.com/artifact/org.web3j/web3j-maven-plugin -->
    <exec-maven-plugin.version>3.1.0</exec-maven-plugin.version>
    <swagger-maven-plugin.version>3.1.8</swagger-maven-plugin.version> <!-- https://github.com/kongchen/swagger-maven-plugin -->
    <swagger-codegen-maven-plugin.version>3.0.0-rc1</swagger-codegen-maven-plugin.version> <!-- https://mvnrepository.com/artifact/io.swagger/swagger-codegen-maven-plugin -->
    <swagger-codegen-maven-plugin.v3.version>3.0.10</swagger-codegen-maven-plugin.v3.version> <!-- https://mvnrepository.com/artifact/io.swagger.codegen.v3/swagger-codegen-maven-plugin -->
    <maven.compiler.source>${java.version}</maven.compiler.source>
    <maven.compiler.target>${java.version}</maven.compiler.target>
  </properties>

  <repositories>
    <!-- For more repositories, refer https://mvnrepository.com/repos -->
    <repository>
      <id>central</id>
      <url>https://repo1.maven.org/maven2/</url>
      <releases><updatePolicy>${dependencies.release.updatePolicy}</updatePolicy></releases>
      <snapshots><enabled>false</enabled></snapshots>
    </repository>
    <repository>
      <id>java.net.public</id>
      <url>https://maven.java.net/content/groups/public/</url>
      <releases><updatePolicy>${dependencies.release.updatePolicy}</updatePolicy></releases>
      <snapshots><enabled>true</enabled></snapshots>
    </repository>
  </repositories>

  <pluginRepositories>
    <pluginRepository>
      <id>central</id>
      <url>https://repo1.maven.org/maven2/</url>
      <releases><updatePolicy>${dependencies.release.updatePolicy}</updatePolicy></releases>
      <snapshots><enabled>false</enabled></snapshots>
    </pluginRepository>
  </pluginRepositories>

  <reporting>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-project-info-reports-plugin</artifactId>
        <reportSets>
          <reportSet>
            <reports>
              <report>index</report>
            </reports>
          </reportSet>
        </reportSets>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jxr-plugin</artifactId>
        <reportSets>
          <reportSet>
            <id>aggregate</id>
            <reports>
              <report>aggregate</report>
              <report>test-aggregate</report>
            </reports>
          </reportSet>
        </reportSets>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-javadoc-plugin</artifactId>
        <reportSets>
          <reportSet>
            <id>aggregate</id>
            <reports>
              <report>aggregate</report>
            </reports>
          </reportSet>
        </reportSets>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-pmd-plugin</artifactId>
        <configuration>
          <!-- For more, refer https://maven.apache.org/plugins/maven-pmd-plugin/pmd-mojo.html -->
          <aggregate>true</aggregate>
          <linkXRef>true</linkXRef>
          <includeXmlInSite>true</includeXmlInSite>
          <skipEmptyReport>true</skipEmptyReport>
          <skipPmdError>true</skipPmdError>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>findbugs-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </reporting>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-enforcer-plugin</artifactId>
        <version>${maven-enforcer-plugin.version}</version>
        <executions>
          <execution>
            <id>enforce-java</id>
            <goals><goal>enforce</goal></goals>
            <configuration>
              <!-- For more standard rules, refer http://maven.apache.org/enforcer/enforcer-rules/ -->
              <rules>
                <requireJavaVersion><version>${java.version}</version></requireJavaVersion>
                <requireMavenVersion><version>3.0</version></requireMavenVersion>
              </rules>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.basepom.maven</groupId>
        <artifactId>duplicate-finder-maven-plugin</artifactId>
        <executions>
          <execution>
            <id>find-duplicate-classes</id>
            <phase>prepare-package</phase>
            <goals><goal>check</goal></goals>
          </execution>
        </executions>
        <configuration>
          <!-- For more, refer https://github.com/basepom/duplicate-finder-maven-plugin/wiki -->
          <skip>false</skip>
          <checkCompileClasspath>false</checkCompileClasspath>
          <checkRuntimeClasspath>true</checkRuntimeClasspath>
          <checkTestClasspath>false</checkTestClasspath>
          <ignoredResourcePatterns>
            <ignoredResourcePattern>about.html</ignoredResourcePattern>
          </ignoredResourcePatterns>
          <ignoredDependencies>
            <dependency>
              <groupId>org.slf4j</groupId>
              <artifactId>jcl-over-slf4j</artifactId>
            </dependency>
          </ignoredDependencies>
        </configuration>
      </plugin>
    </plugins>
    <pluginManagement>
      <plugins>
        <!-- core -->
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>${maven-compiler-plugin.version}</version>
          <inherited>true</inherited>
          <configuration>
            <source>${java.version}</source>
            <target>${java.version}</target>
          </configuration>
        </plugin>
        <plugin>
          <!-- For more, refer https://maven.apache.org/surefire/maven-surefire-plugin/ -->
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>${maven-surefire-plugin.version}</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-site-plugin</artifactId>
          <version>${maven-site-plugin.version}</version>
          <dependencies>
            <dependency>
              <groupId>org.apache.maven.wagon</groupId>
              <artifactId>wagon-ssh</artifactId>
              <version>2.12</version>
            </dependency>
          </dependencies>
        </plugin>
        <!-- sources -->
        <plugin>
          <!-- For more, refer https://github.com/kongchen/swagger-maven-plugin -->
          <groupId>com.github.kongchen</groupId>
          <artifactId>swagger-maven-plugin</artifactId>
          <version>${swagger-maven-plugin.version}</version>
          <executions>
            <execution>
              <id>generate-swagger-api</id>
              <phase>process-classes</phase>
              <goals><goal>generate</goal></goals>
            </execution>
          </executions>
        </plugin>
        <plugin>
          <!-- For more, refer followings
            https://github.com/swagger-api/swagger-codegen
            https://github.com/swagger-api/swagger-codegen/tree/master/modules/swagger-codegen-maven-plugin
          -->
          <groupId>io.swagger</groupId>
          <artifactId>swagger-codegen-maven-plugin</artifactId>
          <version>${swagger-codegen-maven-plugin.version}</version>
          <executions>
            <execution>
              <id>generate-rest-api-doc</id>
              <phase>process-classes</phase>
              <goals><goal>generate</goal></goals>
              <configuration>
                <inputSpec>${project.build.directory}/swagger.json</inputSpec>
                <language>html2</language>
                <output>${project.build.directory}/generated-sources/swagger/html2</output>
                <skip>${swagger-codegen.skip}</skip>
              </configuration>
            </execution>
          </executions>
        </plugin>
        <!-- packaging -->
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-jar-plugin</artifactId>
          <version>${maven-jar-plugin.version}</version>
          <configuration>
            <!-- For more on Maven archiver, refer http://maven.apache.org/shared/maven-archiver/index.html -->
            <archive>
              <addMavenDescriptor>false</addMavenDescriptor>
              <forced>true</forced>
              <index>true</index>
              <manifest>
                <addClasspath>false</addClasspath>
                <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
                <addExtensions>false</addExtensions>
                <classpathLayoutType>simple</classpathLayoutType>
              </manifest>
              <manifestEntries>
                <Source-Revision>${project.svn.revision}</Source-Revision>
              </manifestEntries>
            </archive>
          </configuration>
        </plugin>
        <!-- reporting -->
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-javadoc-plugin</artifactId>
          <version>${maven-javadoc-plugin.version}</version>
          <configuration>
            <javadocExecutable>${java.home}/bin/javadoc</javadocExecutable>
            <!--  <javadocVersion>${java.version}</javadocVersion> -->
            <source>${java.version}</source>
            <maxmemory>256m</maxmemory>
            <!-- causes error with JDK 8 <additionalJOption>-Xms128m</additionalJOption> -->
            <additionalJOptions>--frames</additionalJOptions>
            <failOnError>false</failOnError>
            <attach>true</attach> <!-- for `javadoc:jar`, refer https://maven.apache.org/plugins/maven-javadoc-plugin/jar-mojo.html#attach -->            
            <docencoding>${project.reporting.outputEncoding}</docencoding>
            <encoding>${project.build.sourceEncoding}</encoding>
            <doctitle>${project.name} ${project.version} API</doctitle>
            <windowtitle>${project.name} ${project.version} API</windowtitle>
            <links>
              <link>https://docs.oracle.com/javase/8/docs/api/</link>
              <link>https://docs.oracle.com/javaee/7/api/</link>
              <link>http://www.javadoc.io/doc/com.google.code.findbugs/jsr305/${jsr305.version}</link>
              <link>http://docs.jboss.org/hibernate/beanvalidation/spec/2.0/api/</link>
              <link>http://docs.jboss.org/hibernate/validator/6.1/api/</link>
              <link>http://www.javadoc.io/doc/org.slf4j/slf4j-api/${slf4j.version}/</link>
              <link>https://junit.org/junit5/docs/${junit5.version}/api/</link>
              <link>http://commons.apache.org/proper/commons-lang/javadocs/api-${commons-lang3.version}/</link>
              <link>http://commons.apache.org/proper/commons-collections/javadocs/api-${commons-collections4.version}/</link>
              <link>http://docs.swagger.io/swagger-core/v1.5.0/apidocs/</link>
              <link>https://javadoc.io/doc/org.web3j/core/${web3j.version}</link>
              <link>https://javadoc.io/doc/org.web3j/abi/${web3j.version}</link>
              <link>https://javadoc.io/doc/org.web3j/crypto/${web3j.version}</link>
              <link>https://javadoc.io/doc/org.web3j/utils/${web3j.version}</link>
            </links>
            <show>protected</show>
            <splitindex>true</splitindex>
            <stylesheet>java</stylesheet> <!-- 'java' (default) or 'maven' -->
          </configuration>
          <executions>
            <execution>
              <id>javadoc-jar</id>
              <phase>prepare-package</phase> <!-- or 'package' -->
              <goals><goal>jar</goal></goals>
            </execution>
          </executions>
        </plugin>
        <plugin>
          <!-- For more, refer http://gleclaire.github.io/findbugs-maven-plugin/ -->
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>findbugs-maven-plugin</artifactId>
          <version>${findbugs-maven-plugin.version}</version>
          <configuration>
            <effort>Max</effort>
            <threshold>Low</threshold>
            <!-- findbugs-maven-plugin doesn't provide aggregate goal or mode -->
            <includeFilterFile>src/config/findbugs/findbugs-exclude.xml</includeFilterFile>
            <plugins>
              <plugin>
                <groupId>com.mebigfatguy.fb-contrib</groupId>
                <artifactId>fb-contrib</artifactId>
                <version>6.8.3</version>
              </plugin>
            </plugins>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-checkstyle-plugin</artifactId>
          <version>${maven-checkstyle-plugin.version}</version>
        </plugin>
        <plugin>
          <groupId>org.basepom.maven</groupId>
          <artifactId>duplicate-finder-maven-plugin</artifactId>
          <version>${duplicate-finder-maven-plugin.version}</version>
        </plugin>
        <!-- tools supporting -->
        <plugin>
          <!-- http://maven.apache.org/plugins/maven-eclipse-plugin/eclipse-mojo.html -->
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-eclipse-plugin</artifactId>
          <version>${maven-eclipse-plugin.version}</version>
          <configuration>
            <!-- the next two item doesn't work on m2e. m2e has its own confgiruation in Eclipse preferences -->
            <downloadJavadocs>true</downloadJavadocs>
            <downloadSources>true</downloadSources>
            <forceRecheck>false</forceRecheck>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.eclipse.m2e</groupId>
          <artifactId>lifecycle-mapping</artifactId>
          <version>1.0.0</version>
          <configuration>
            <lifecycleMappingMetadata>
              <pluginExecutions>
                <pluginExecution>
                  <pluginExecutionFilter>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-dependency-plugin</artifactId>
                    <versionRange>[1.0.0,)</versionRange>
                    <goals><goal>copy-dependencies</goal></goals>
                  </pluginExecutionFilter>
                  <action><ignore/></action>
                </pluginExecution>
                <pluginExecution>
                  <pluginExecutionFilter>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-antrun-plugin</artifactId>
                    <versionRange>[1.0.0,)</versionRange>
                    <goals><goal>run</goal></goals>
                  </pluginExecutionFilter>
                  <action><ignore/></action>
                </pluginExecution>
                <pluginExecution>
                  <pluginExecutionFilter>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>aspectj-maven-plugin</artifactId>
                    <versionRange>[1.0.0,)</versionRange>
                    <goals>
                      <goal>compile</goal>
                      <goal>test-compile</goal>
                    </goals>
                  </pluginExecutionFilter>
                  <action><ignore/></action>
                </pluginExecution>
                <pluginExecution>
                  <pluginExecutionFilter>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>build-helper-maven-plugin</artifactId>
                    <versionRange>[1.0.0,)</versionRange>
                    <goals><goal>parse-version</goal></goals>
                  </pluginExecutionFilter>
                  <action><ignore/></action>
                </pluginExecution>
                <pluginExecution>
                  <pluginExecutionFilter>
                    <groupId>net.alchim31.maven</groupId>
                    <artifactId>scala-maven-plugin</artifactId>
                    <versionRange>[1.0.0,)</versionRange>
                    <goals>
                      <goal>add-source</goal>
                      <goal>compile</goal>
                      <goal>testCompile</goal>
                    </goals>
                  </pluginExecutionFilter>
                  <action><ignore/></action>
                </pluginExecution>
              </pluginExecutions>
            </lifecycleMappingMetadata>
          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>

  <dependencies>
    <dependency>
      <!-- JSR 305: Annotations for Software Defect Detection (https://jcp.org/en/jsr/detail?id=305) -->
      <groupId>com.google.code.findbugs</groupId>
      <artifactId>jsr305</artifactId>
      <version>${jsr305.version}</version>
    </dependency>
    <dependency>
      <!-- JSR 330: Dependency Injection for Java -->
      <groupId>javax.inject</groupId>
      <artifactId>javax.inject</artifactId>
      <version>1</version>
    </dependency>
    <dependency>
      <!-- JSR 349: Bean Validation 1.1 (https://jcp.org/en/jsr/detail?id=349) -->
      <groupId>javax.validation</groupId>
      <artifactId>validation-api</artifactId>
      <version>${validation-api.version}</version>
    </dependency>
    <dependency>
      <!-- Hibernate Validator -->
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-validator</artifactId>
      <version>${hibernate-validator.version}</version>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>${slf4j.version}</version>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>jcl-over-slf4j</artifactId>
      <version>${slf4j.version}</version>
      <scope>runtime</scope>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>jul-to-slf4j</artifactId>
      <version>${slf4j.version}</version>
    </dependency>
    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
      <version>${logback.version}</version>
    </dependency>
    <dependency>
      <groupId>org.codehaus.janino</groupId>
      <artifactId>janino</artifactId>
      <version>2.7.8</version>
    </dependency>
    <dependency>
      <!-- https://junit.org/junit5/docs/current/user-guide/#running-tests-build-maven -->
      <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-engine/5.5.1 -->
      <!-- 'junit-jupiter-engine' depends on 'junit-jupiter-api' -->
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter-engine</artifactId>
      <version>${junit5.version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.testng</groupId>
      <artifactId>testng</artifactId>
      <version>${testng.version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.mockito</groupId>
      <artifactId>mockito-core</artifactId>
      <version>${mockito.version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.mockito</groupId>
      <artifactId>mockito-junit-jupiter</artifactId>
      <version>${mockito.version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-lang3</artifactId>
      <version>${commons-lang3.version}</version>
    </dependency>
    <!-- For more typesafe config, refer https://github.com/typesafehub/config -->
    <dependency>
      <groupId>com.typesafe</groupId>
      <artifactId>config</artifactId>
      <version>${typesafe-config.version}</version>
    </dependency>
  </dependencies>
</project>

Typical POM for Spring Boot Project

<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>
  <!-- POM for Spring Boot 2.1 : https://docs.spring.io/spring-boot/docs/2.1.x/reference/htmlsingle/#getting-started-maven-installation -->
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.5.RELEASE</version> <!-- last as of 2020/11/03 : v2.3.5.RELEASE -->
  </parent>
  <groupId>foo</groupId>
  <artifactId>foo-bar</artifactId>
  <version>0.0.1-SNAPSHOT</version>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <!-- control build behavior -->
    <skipTests>false</skipTests>
    <maven.deploy.skip>true</maven.deploy.skip>
    <maven.javadoc.skip>true</maven.javadoc.skip>
    <maven.javadoc.failOnWarnings>false</maven.javadoc.failOnWarnings>
    <maven.site.skip>false</maven.site.skip> <!-- consumed by maven-site-plugin -->
    <maven.site.deploy.skip>true</maven.site.deploy.skip> <!-- consumed by maven-site-plugin -->
    <generateProjectInfo>false</generateProjectInfo> <!-- consumed by maven-site-plugin -->
    <generateReports>true</generateReports> <!-- consumed by maven-site-plugin -->
    <doclint>none</doclint> <!-- http://maven.apache.org/plugins/maven-javadoc-plugin/javadoc-mojo.html#doclint -->
    <findbugs.skip>true</findbugs.skip>
    <checkstyle.skip>true</checkstyle.skip>
    <dependencies.release.updatePolicy>daily</dependencies.release.updatePolicy> <!-- always | daily | never -->
    <!-- versions for Java SDK and dependencies -->
    <java.version>1.9</java.version>
    <jsr305.version>3.0.2</jsr305.version> <!-- https://mvnrepository.com/artifact/com.google.code.findbugs/jsr305 -->
    <validation-api.version>2.0.1.Final</validation-api.version> <!-- https://mvnrepository.com/artifact/javax.validation/validation-api -->
    <hibernate-validator.version>6.1.2.Final</hibernate-validator.version> <!-- https://mvnrepository.com/artifact/org.hibernate.validator/hibernate-validator -->
    <slf4j.version>1.7.30</slf4j.version> <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
    <logback.version>1.2.3</logback.version> <!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-classic -->
    <janino.version>3.1.0</janino.version> <!-- https://mvnrepository.com/artifact/org.codehaus.janino/janino -->
    <junit.version>4.12</junit.version>
    <junit5.version>5.6.1</junit5.version> <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-engine -->
    <testng.version>6.9.10</testng.version>
    <mockito.version>3.1.0</mockito.version> <!-- affect the dependency version of spring-starter-test module -->
    <commons-lang3.version>3.9</commons-lang3.version> <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
    <commons-validator.version>1.6</commons-validator.version> <!-- https://mvnrepository.com/artifact/commons-validator/commons-validator -->
    <commons-collections4.version>4.4</commons-collections4.version> <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-collections4 -->
    <typesafe-config.version>1.3.1</typesafe-config.version>
    <swagger.version>2.0.8</swagger.version> <!-- https://mvnrepository.com/artifact/io.swagger.core.v3 -->
    <springfox-swagger2.version>2.9.2</springfox-swagger2.version> <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 -->
    <mybatis.version>3.5.1</mybatis.version> <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
    <jjwt.version>0.10.7</jjwt.version> <!-- https://mvnrepository.com/artifact/io.jsonwebtoken -->
    <web3j.version>4.8.0</web3j.version> <!-- https://mvnrepository.com/artifact/org.web3j -->
    <okhttp.version>4.3.1</okhttp.version> <!-- https://mvnrepository.com/artifact/com.squareup.okhttp3 -->
    <!-- version for Maven plugins -->
    <maven-enforcer-plugin.version>3.0.0-M3</maven-enforcer-plugin.version> <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-enforcer-plugin -->
    <maven-compiler-plugin.version>3.8.1</maven-compiler-plugin.version> <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-compiler-plugin -->
    <maven-surefire-plugin.version>2.22.2</maven-surefire-plugin.version> <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-surefire-plugin -->
    <maven-jar-plugin.version>3.2.0</maven-jar-plugin.version> <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-jar-plugin -->
    <maven-site-plugin.version>3.9.0</maven-site-plugin.version> <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-site-plugin -->
    <maven-javadoc-plugin.version>3.2.0</maven-javadoc-plugin.version> <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-javadoc-plugin -->
    <duplicate-finder-maven-plugin.version>1.4.0</duplicate-finder-maven-plugin.version> <!-- https://mvnrepository.com/artifact/org.basepom.maven/duplicate-finder-maven-plugin -->
    <findbugs-maven-plugin.version>3.0.5</findbugs-maven-plugin.version> <!-- https://mvnrepository.com/artifact/org.codehaus.mojo/findbugs-maven-plugin -->
    <maven-checkstyle-plugin.version>3.1.1</maven-checkstyle-plugin.version> <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-checkstyle-plugin -->
    <maven-eclipse-plugin.version>2.10</maven-eclipse-plugin.version> <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-eclipse-plugin -->
    <swagger-maven-plugin.version>3.1.8</swagger-maven-plugin.version> <!-- https://github.com/kongchen/swagger-maven-plugin -->
    <swagger-codegen-maven-plugin.version>3.0.0-rc1</swagger-codegen-maven-plugin.version> <!-- https://mvnrepository.com/artifact/io.swagger/swagger-codegen-maven-plugin -->
    <swagger-codegen-maven-plugin.v3.version>3.0.10</swagger-codegen-maven-plugin.v3.version> <!-- https://mvnrepository.com/artifact/io.swagger.codegen.v3/swagger-codegen-maven-plugin -->
    <web3j-maven-plugin.version>4.5.11</web3j-maven-plugin.version> <!-- https://mvnrepository.com/artifact/org.web3j/web3j-maven-plugin -->
    <exec-maven-plugin>1.6.0</exec-maven-plugin>
    <maven.compiler.source>${java.version}</maven.compiler.source>
    <maven.compiler.target>${java.version}</maven.compiler.target>
  </properties>

  <repositories>
    <!-- For more repositories, refer https://mvnrepository.com/repos -->
    <repository>
      <id>central</id>
      <url>https://repo1.maven.org/maven2/</url>
      <releases>
        <updatePolicy>${dependencies.release.updatePolicy}</updatePolicy>
      </releases>
      <snapshots><enabled>false</enabled></snapshots>
    </repository>
    <repository>
      <id>spring-libs-milestone</id>
      <url>https://repo.spring.io/libs-milestone</url>
      <releases><updatePolicy>${dependencies.release.updatePolicy}</updatePolicy><releases>
      <snapshots><enabled>false</enabled></snapshots>
    </repository>
    <repository>
      <id>java.net.public</id>
      <url>https://maven.java.net/content/groups/public/</url>
      <releases>
        <updatePolicy>${dependencies.release.updatePolicy}</updatePolicy>
      </releases>
      <snapshots><enabled>true</enabled></snapshots>
    </repository>
    <repository>
      <id>jcenter-snapshots</id>
      <name>jcenter</name>
      <url>https://jcenter.bintray.com/</url>
      <releases><enabled>false</enabled></releases>
    </repository>
  </repositories>

  <pluginRepositories>
    <pluginRepository>
      <id>central</id>
      <url>https://repo1.maven.org/maven2/</url>
      <releases>
        <updatePolicy>${dependencies.release.updatePolicy}</updatePolicy>
      </releases>
      <snapshots><enabled>false</enabled></snapshots>
    </pluginRepository>
    <pluginRepository>
      <id>spring-plugins</id>
      <url>https://repo.spring.io/plugins-release/</url>
      <releases><updatePolicy>${dependencies.release.updatePolicy}</updatePolicy></releases>
      <snapshots><enabled>false</enabled></snapshots>
    </pluginRepository>
  </pluginRepositories>

  <reporting>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-project-info-reports-plugin</artifactId>
        <reportSets>
          <reportSet>
            <reports>
              <report>index</report>
            </reports>
          </reportSet>
        </reportSets>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jxr-plugin</artifactId>
        <reportSets>
          <reportSet>
            <id>aggregate</id>
            <reports>
              <report>aggregate</report>
              <report>test-aggregate</report>
            </reports>
          </reportSet>
        </reportSets>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-javadoc-plugin</artifactId>
        <reportSets>
          <reportSet>
            <id>aggregate</id>
            <reports>
              <report>aggregate</report>
            </reports>
          </reportSet>
        </reportSets>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-pmd-plugin</artifactId>
        <configuration>
          <!-- For more, refer https://maven.apache.org/plugins/maven-pmd-plugin/pmd-mojo.html -->
          <aggregate>true</aggregate>
          <linkXRef>true</linkXRef>
          <includeXmlInSite>true</includeXmlInSite>
          <skipEmptyReport>true</skipEmptyReport>
          <skipPmdError>true</skipPmdError>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>findbugs-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </reporting>

  <build>
    <plugins>
      <!-- frameworks support -->
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
      <plugin>
        <groupId>org.web3j</groupId>
        <artifactId>web3j-maven-plugin</artifactId>
        <version>${web3j-maven-plugin.version}</version>
      </plugin>
      <!-- core and baseline -->
      <plugin>
        <groupId>org.basepom.maven</groupId>
        <artifactId>duplicate-finder-maven-plugin</artifactId>
        <version>${duplicate-finder-maven-plugin.version}</version>
        <executions>
          <execution>
            <id>find-duplicate-classes</id>
            <phase>prepare-package</phase>
            <goals>
              <goal>check</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <!-- For more, refer https://github.com/basepom/duplicate-finder-maven-plugin/wiki -->
          <skip>false</skip>
          <checkCompileClasspath>false</checkCompileClasspath>
          <checkRuntimeClasspath>true</checkRuntimeClasspath>
          <checkTestClasspath>false</checkTestClasspath>
          <ignoredResourcePatterns>
            <ignoredResourcePattern>about\.html</ignoredResourcePattern>
          </ignoredResourcePatterns>
          <ignoredClassPatterns>
            <ignoredClassPattern>META-INF\.versions\.9\.module-info</ignoredClassPattern>
          </ignoredClassPatterns>
          <ignoredDependencies>
            <dependency>
              <groupId>org.slf4j</groupId>
              <artifactId>jcl-over-slf4j</artifactId>
            </dependency>
          </ignoredDependencies>
        </configuration>
      </plugin>
      <plugin>
        <!-- https://maven.apache.org/enforcer/maven-enforcer-plugin/ -->
        <!-- `enforcer:enforce` at `validate` phase -->
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-enforcer-plugin</artifactId>
        <version>${maven-enforcer-plugin.version}</version>
        <executions>
          <execution>
            <id>enforce-java</id>
            <goals>
              <goal>enforce</goal>
            </goals>
            <configuration>
              <!-- For more standard rules, refer http://maven.apache.org/enforcer/enforcer-rules/ -->
              <rules>
                <requireJavaVersion>
                  <version>${java.version}</version>
                </requireJavaVersion>
                <requireMavenVersion>
                  <version>3.0</version>
                </requireMavenVersion>
              </rules>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>${maven-compiler-plugin.version}</version>
        <inherited>true</inherited>
        <configuration>
          <source>${java.version}</source>
          <target>${java.version}</target>
        </configuration>
      </plugin>
      <plugin>
        <!-- For more, refer https://maven.apache.org/surefire/maven-surefire-plugin/ -->
        <!-- `surefire:test` at `test` phase -->
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>${maven-surefire-plugin.version}</version>
      </plugin>
      <plugin>
        <!-- https://maven.apache.org/plugins/maven-jar-plugin/ -->
        <!-- `jar:jar` at `package` phase -->
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <version>${maven-jar-plugin.version}</version>
        <configuration>
          <!-- For more on Maven archiver, refer http://maven.apache.org/shared/maven-archiver/index.html -->
          <archive>
            <addMavenDescriptor>false</addMavenDescriptor>
            <forced>true</forced>
            <index>true</index>
            <manifest>
              <addClasspath>false</addClasspath>
              <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
              <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
              <addExtensions>false</addExtensions>
              <classpathLayoutType>simple</classpathLayoutType>
            </manifest>
            <manifestEntries>
              <Source-Revision>${project.svn.revision}</Source-Revision>
            </manifestEntries>
          </archive>
        </configuration>
      </plugin>
      <!-- reporting -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-site-plugin</artifactId>
        <version>${maven-site-plugin.version}</version>
        <dependencies>
          <dependency>
            <groupId>org.apache.maven.wagon</groupId>
            <artifactId>wagon-ssh</artifactId>
            <version>2.12</version>
          </dependency>
        </dependencies>
      </plugin>
      <plugin>
        <!-- https://maven.apache.org/plugins/maven-javadoc-plugin/ -->
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-javadoc-plugin</artifactId>
        <version>${maven-javadoc-plugin.version}</version>
        <configuration>
          <javadocExecutable>${java.home}/bin/javadoc</javadocExecutable>
          <!-- <javadocVersion>${java.version}</javadocVersion> -->
          <source>${java.version}</source>
          <maxmemory>256m</maxmemory>
          <!-- causes error with JDK 8 <additionalJOption>-Xms128m</additionalJOption> -->
          <failOnError>false</failOnError>
          <attach>true</attach> <!-- for `javadoc:jar`, refer https://maven.apache.org/plugins/maven-javadoc-plugin/jar-mojo.html#attach -->
          <docencoding>${project.reporting.outputEncoding}</docencoding>
          <encoding>${project.build.sourceEncoding}</encoding>
          <doctitle>${project.name} ${project.version} API</doctitle>
          <windowtitle>${project.name} ${project.version} API</windowtitle>
          <links>
            <link>https://docs.oracle.com/javase/8/docs/api/</link>
            <link>https://docs.oracle.com/javaee/7/api/</link>
            <link>https://docs.spring.io/spring/docs/5.1.x/javadoc-api/</link>
            <link>https://docs.spring.io/spring-boot/docs/2.1.x/api/</link>
            <link>http://www.javadoc.io/doc/com.google.code.findbugs/jsr305/${jsr305.version}</link>
            <link>http://docs.jboss.org/hibernate/beanvalidation/spec/2.0/api/</link>
            <link>http://docs.jboss.org/hibernate/validator/6.1/api/</link>
            <link>http://www.javadoc.io/doc/org.slf4j/slf4j-api/${slf4j.version}/</link>
            <link>https://junit.org/junit5/docs/${junit5.version}/api/</link>
            <link>http://commons.apache.org/proper/commons-lang/javadocs/api-${commons-lang3.version}/</link>
            <link>http://commons.apache.org/proper/commons-collections/javadocs/api-${commons-collections4.version}/</link>
            <link>https://javadoc.io/doc/org.web3j/core/${web3j.version}</link>
            <link>https://javadoc.io/doc/org.web3j/abi/${web3j.version}</link>
            <link>https://javadoc.io/doc/org.web3j/crypto/${web3j.version}</link>
            <link>https://javadoc.io/doc/org.web3j/utils/${web3j.version}</link>
          </links>
          <show>protected</show>
          <splitindex>true</splitindex>
          <stylesheet>java</stylesheet> <!-- 'java' (default) or 'maven' -->
        </configuration>
        <executions>
          <execution>
            <id>javadoc-jar</id>
            <phase>prepare-package</phase> <!-- or 'package' -->
            <goals>
              <goal>jar</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <!-- For more, refer http://gleclaire.github.io/findbugs-maven-plugin/ -->
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>findbugs-maven-plugin</artifactId>
        <version>${findbugs-maven-plugin.version}</version>
        <configuration>
          <effort>Max</effort>
          <threshold>Low</threshold>
          <!-- findbugs-maven-plugin doesn't provide aggregate goal or mode -->
          <includeFilterFile>src/config/findbugs/findbugs-exclude.xml</includeFilterFile>
          <plugins>
            <plugin>
              <groupId>com.mebigfatguy.fb-contrib</groupId>
              <artifactId>fb-contrib</artifactId>
              <version>6.8.3</version>
            </plugin>
          </plugins>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-checkstyle-plugin</artifactId>
        <version>${maven-checkstyle-plugin.version}</version>
      </plugin>
      <!-- tools support -->
      <plugin>
        <!-- http://maven.apache.org/plugins/maven-eclipse-plugin/eclipse-mojo.html -->
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-eclipse-plugin</artifactId>
        <version>${maven-eclipse-plugin.version}</version>
        <configuration>
          <!-- the next two item doesn't work on m2e. m2e has its own confgiruation in Eclipse preferences -->
          <downloadJavadocs>true</downloadJavadocs>
          <downloadSources>true</downloadSources>
          <forceRecheck>false</forceRecheck>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.eclipse.m2e</groupId>
        <artifactId>lifecycle-mapping</artifactId>
        <version>1.0.0</version>
        <configuration>
          <lifecycleMappingMetadata>
            <pluginExecutions>
              <pluginExecution>
                <pluginExecutionFilter>
                  <groupId>org.apache.maven.plugins</groupId>
                  <artifactId>maven-dependency-plugin</artifactId>
                  <versionRange>[1.0.0,)</versionRange>
                  <goals><goal>copy-dependencies</goal></goals>
                </pluginExecutionFilter>
                <action><ignore /></action>
              </pluginExecution>
              <pluginExecution>
                <pluginExecutionFilter>
                  <groupId>org.apache.maven.plugins</groupId>
                  <artifactId>maven-antrun-plugin</artifactId>
                  <versionRange>[1.0.0,)</versionRange>
                  <goals><goal>run</goal></goals>
                </pluginExecutionFilter>
                <action><ignore /></action>
              </pluginExecution>
              <pluginExecution>
                <pluginExecutionFilter>
                  <groupId>org.codehaus.mojo</groupId>
                  <artifactId>aspectj-maven-plugin</artifactId>
                  <versionRange>[1.0.0,)</versionRange>
                  <goals>
                    <goal>compile</goal>
                    <goal>test-compile</goal>
                  </goals>
                </pluginExecutionFilter>
                <action><ignore /></action>
              </pluginExecution>
              <pluginExecution>
                <pluginExecutionFilter>
                  <groupId>org.codehaus.mojo</groupId>
                  <artifactId>build-helper-maven-plugin</artifactId>
                  <versionRange>[1.0.0,)</versionRange>
                  <goals><goal>parse-version</goal></goals>
                </pluginExecutionFilter>
                <action><ignore /></action>
              </pluginExecution>
              <pluginExecution>
                <pluginExecutionFilter>
                  <groupId>net.alchim31.maven</groupId>
                  <artifactId>scala-maven-plugin</artifactId>
                  <versionRange>[1.0.0,)</versionRange>
                  <goals>
                    <goal>add-source</goal>
                    <goal>compile</goal>
                    <goal>testCompile</goal>
                  </goals>
                </pluginExecutionFilter>
                <action><ignore /></action>
              </pluginExecution>
              <pluginExecution>
                <pluginExecutionFilter>
                  <groupId>io.swagger.core.v3</groupId>
                  <artifactId>swagger-maven-plugin</artifactId>
                  <versionRange>[1.0.0,)</versionRange>
                  <goals><goal>resolve</goal></goals>
                </pluginExecutionFilter>
                <action>
                  <ignore><message>swagger-maven-plugin (goal "resolve") is ignored by m2e.</message></ignore>
                </action>
              </pluginExecution>
              <pluginExecution>
                <pluginExecutionFilter>
                  <groupId>io.swagger.codegen.v3</groupId>
                  <artifactId>swagger-codegen-maven-plugin</artifactId>
                  <versionRange>[1.0.0,)</versionRange>
                  <goals><goal>generate</goal></goals>
                </pluginExecutionFilter>
                <action>
                  <ignore>
                    <message>swagger-codegen-maven-plugin (goal "generate") is ignored by m2e.</message>
                  </ignore>
                </action>
              </pluginExecution>
              <pluginExecution>
                <pluginExecutionFilter>
                  <groupId>com.github.kongchen</groupId>
                  <artifactId>swagger-maven-plugin</artifactId>
                  <versionRange>[1.0.0,)</versionRange>
                  <goals><goal>generate</goal></goals>
                </pluginExecutionFilter>
                <action>
                  <ignore>
                    <message>wagger-maven-plugin (goal "generate") is ignored by m2e.</message>
                  </ignore>
                </action>
              </pluginExecution>
            </pluginExecutions>
          </lifecycleMappingMetadata>
        </configuration>
      </plugin>
    </plugins>
  </build>

  <dependencies>
    <dependency>
      <!-- JSR 305: Annotations for Software Defect Detection (https://jcp.org/en/jsr/detail?id=305) -->
      <groupId>com.google.code.findbugs</groupId>
      <artifactId>jsr305</artifactId>
      <version>${jsr305.version}</version>
    </dependency>
    <dependency>
      <!-- JSR 330: Dependency Injection for Java -->
      <groupId>javax.inject</groupId>
      <artifactId>javax.inject</artifactId>
      <version>1</version>
    </dependency>
    <dependency>
      <!-- JSR 349: Bean Validation 1.1 (https://jcp.org/en/jsr/detail?id=349) -->
      <groupId>javax.validation</groupId>
      <artifactId>validation-api</artifactId>
      <version>${validation-api.version}</version>
    </dependency>
    <dependency>
      <!-- Hibernate Validator -->
      <groupId>org.hibernate.validator</groupId>
      <artifactId>hibernate-validator</artifactId>
      <version>${hibernate-validator.version}</version>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>${slf4j.version}</version>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>jcl-over-slf4j</artifactId>
      <version>${slf4j.version}</version>
      <scope>runtime</scope>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>jul-to-slf4j</artifactId>
      <version>${slf4j.version}</version>
    </dependency>
    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
      <version>${logback.version}</version>
    </dependency>
    <dependency>
      <!-- to support conditional processing of Logback config. : https://logback.qos.ch/setup.html#janino -->
      <groupId>org.codehaus.janino</groupId>
      <artifactId>janino</artifactId>
      <version>${janino.version}</version>
    </dependency>
    <dependency>
      <!-- https://junit.org/junit5/docs/current/user-guide/#running-tests-build-maven -->
      <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-engine/5.5.1 -->
      <!-- 'junit-jupiter-engine' depends on 'junit-jupiter-api' -->
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter-engine</artifactId>
      <version>${junit5.version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.testng</groupId>
      <artifactId>testng</artifactId>
      <version>${testng.version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.mockito</groupId>
      <artifactId>mockito-core</artifactId>
      <version>${mockito.version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-lang3</artifactId>
      <version>${commons-lang3.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-collections4</artifactId>
      <version>${commons-collections4.version}</version>
    </dependency>
    <dependency>
      <!-- For more typesafe config, refer https://github.com/typesafehub/config -->
      <groupId>com.typesafe</groupId>
      <artifactId>config</artifactId>
      <version>${typesafe-config.version}</version>
    </dependency>
    <!-- Either web or webflux -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-devtools</artifactId>
      <scope>runtime</scope>
    </dependency>
    <dependency>
      <!-- https://docs.spring.io/spring-boot/docs/2.1.x/reference/htmlsingle/#boot-features-testing -->
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
      <exclusions>
        <exclusion>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
        </exclusion>
        <exclusion>
          <groupId>org.junit.vintage</groupId>
          <artifactId>junit-vintage-engine</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>io.swagger.core.v3</groupId>
      <artifactId>swagger-core</artifactId>
      <version>${swagger.version}</version>
    </dependency>
    <dependency>
      <groupId>javax.ws.rs</groupId>
      <artifactId>javax.ws.rs-api</artifactId>
      <version>2.1</version>
    </dependency>
    <dependency>
      <groupId>io.swagger</groupId>
      <artifactId>swagger-hibernate-validations</artifactId>
      <version>1.5.22</version>
    </dependency>
    <dependency>
      <groupId>io.springfox</groupId>
      <artifactId>springfox-swagger2</artifactId>
      <version>${springfox-swagger2.version}</version>
    </dependency>
    <dependency>
      <groupId>io.springfox</groupId>
      <artifactId>springfox-swagger-ui</artifactId>
      <version>${springfox-swagger2.version}</version>
    </dependency>
    <dependency>
      <!-- Springfox Support for JSR-303 : https://springfox.github.io/springfox/docs/2.9.2/#springfox-support-for-jsr-303 -->
      <groupId>io.springfox</groupId>
      <artifactId>springfox-bean-validators</artifactId>
      <version>${springfox-swagger2.version}</version>
    </dependency>
    <dependency>
      <groupId>org.web3j</groupId>
      <artifactId>core</artifactId>
      <version>${web3j.version}</version>
      <exclusions>
        <exclusion>
          <groupId>com.squareup.okhttp3</groupId>
          <artifactId>okhttp</artifactId>
        </exclusion>
        <exclusion>
          <groupId>com.squareup.okhttp3</groupId>
          <artifactId>logging-interceptor</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>org.web3j</groupId>
      <artifactId>codegen</artifactId>
      <version>${web3j.version}</version>
    </dependency>
    <dependency>
      <groupId>com.squareup.okhttp3</groupId>
      <artifactId>okhttp</artifactId>
      <version>${okhttp.version}</version>
    </dependency>
    <dependency>
      <groupId>com.squareup.okhttp3</groupId>
      <artifactId>logging-interceptor</artifactId>
      <version>${okhttp.version}</version>
    </dependency>
  </dependencies>
</project>

Referencing Maven project properties of List type

//@todo

This syntax works within pom.xml and Ant build files using Maven Ant plugin. But this doesn't working with resource filtering of Maven. I can't find any explain or reason for this. Is it a bug?

    ...
    <artifact:pom id="this-pom" file="${basedir}/pom.xml"/>
    <xsddoc out="${this-pom.reporting.outputDirectory}/xsddocs"
       verbose="true">
       <fileset dir="${this-pom.build.resources[0].directory}" 
          includes="**/*.xsd"/>
    </xsddoc>
    ...

Build Lifecycle, Build Phase, Plugin and Goal

Maven-buildlifecycle

Guidelines for multi-moduled Maven project

  1. Separate parent project from container project.
  2. Define properties in the parent POM file as possible.
  3. Define the following properties explicitly for clearness and control.
    • Encoding related properties whose default value are dependent on platform.
      • project.build.sourceEncoding
      • project.reporting.outputEncoding
    • Properties to skip situationally unnecessary long running goals.
      • skipTests
      • maven.javadoc.skip
      • maven.deploy.skip
      • findbugs.skip
      • checkstyle.skip
    • Properties to run maven more stable way.
    • Paths for executable programs external to Maven
      • graphviz.home
  1. Define all plugins in the <pluginManagement> element of parent POM file.
    • Don't specify version to plugin definitions in child POM files.
  1. Define repositories in the parent POM file as possible.
  2. Define plugins to analyze or diagnose the sources or resources of the project as a reporting plugin as possible.
  3. Start values for path with ${project.basedir}, ${project.build.directory}, ${project.build.outputDirectory} or so on
    • When just specifying relative path such as 'target/classes', the result directory could be different if you build the project from the enclosing project in multi-module case.
    • If you specify the path with leading ${project.build.directory}, the resulting directory always would be one that is calculated with the current POM's project.
  1. Use resources in target/classes not in src/main/resources, considering resource filtering.

Sample of parent POM in action

<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>
  <groupId>thridstage</groupId>
  <artifactId>thridstage-framework-parent</artifactId>
  <version>3.0.0-SNAPSHOT</version>
  <packaging>pom</packaging>

  <name>Thirdstage Framework</name>
  <url>...</url>
  <inceptionYear>2012</inceptionYear>
  <organization>
    <name>...</name>
    <url>...</url>
  </organization>

  <prerequisites>
    <maven>3.0</maven>
  </prerequisites>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <graphviz.home>${env.GRAPHVIZ_HOME}</graphviz.home>
    <skipTests>false</skipTests>
    <maven.deploy.skip>true</maven.deploy.skip>
    <maven.javadoc.skip>false</maven.javadoc.skip>
    <maven.site.deploy.skip>true</maven.site.deploy.skip>
    <findbugs.skip>true</findbugs.skip>
    <checkstyle.skip>true</checkstyle.skip>
    <dependency.locations.enabled>false</dependency.locations.enabled>
    <antrun.echos.properties>true</antrun.echos.properties>
    <scm.url.base>...</scm.url.base>
  </properties>

  <issueManagement>
    <system>Redmine</system>
    <url>.../issues</url>
  </issueManagement>
  <scm>
    <connection>scm:svn:http:...</connection>
    <url>http:...</url>
  </scm>
  <distributionManagement>
    <repository>
      <id>...</id>
      <name>...</name>
      <url>...</url>
    </repository>
    <snapshotRepository>
      <id>...</id>
      <name>...</name>
      <url>...</url>
    </snapshotRepository>
    <site>
      <id>...</id>
      <url>sftp://.../${project.version}</url>
    </site>
  </distributionManagement>

  <repositories>
    <repository>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
      <id>thirdstag-releases</id>
      <url>...</url>
    </repository>
    <repository>
      <releases>
        <enabled>false</enabled>
      </releases>
      <snapshots>
        <enabled>true</enabled>
      </snapshots>
      <id>thirdstage-snapshots</id>
      <url>...</url>
    </repository>
    <repository>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
      <id>central2</id>
      <url>http://repo2.maven.org/maven2/</url>
    </repository>
    <repository>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
      <id>maven2-repository.dev.java.net</id>
      <name>Java.net Repository for Maven</name>
      <url>http://download.java.net/maven/2/</url>
    </repository>
    <repository>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
      <id>thirdparty</id>
      <name>3rd-party Repository</name>
      <url>http://repo.expertvill.net/nexus/content/repositories/thirdparty</url>
    </repository>
    <repository>
      <id>evolvis-3rdparty</id>
      <url>http://maven-repo.evolvis.org/3rdparty</url>
    </repository>
  </repositories>
  <pluginRepositories>
    <pluginRepository>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
      <id>central2</id>
      <url>http://repo2.maven.org/maven2/</url>
    </pluginRepository>
    <pluginRepository>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
      <id>spring-beandoc</id>
      <url>http://spring-beandoc.sourceforge.net/repo</url>
    </pluginRepository>
    <pluginRepository>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
      <id>tmatesoft-releases</id>
      <url>http://maven.tmatesoft.com/content/repositories/releases/</url>
    </pluginRepository>
    <pluginRepository>
      <releases>
        <enabled>false</enabled>
      </releases>
      <id>tmatesoft-snapshots</id>
      <url>http://maven.tmatesoft.com/content/repositories/snapshots/</url>
    </pluginRepository>
    <pluginRepository>
      <id>evolvis-3rdparty</id>
      <url>http://maven-repo.evolvis.org/3rdparty</url>
    </pluginRepository>
    <pluginRepository>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
      <id>elca-services</id>
      <url>http://el4.elca-services.ch/el4j/maven2repository</url>
    </pluginRepository>
  </pluginRepositories>

  <reporting>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-checkstyle-plugin</artifactId>
        <configuration>
          <configLocation>../thirdstage.framework.parent/src/main/config/checkstyle/checkstyle.xml</configLocation>
          <propertyExpansion>parent.basedir=../thirdstage.framework.parent</propertyExpansion>
          <failsOnError>false</failsOnError>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>findbugs-maven-plugin</artifactId>
        <version>2.3.2</version>
        <configuration>
          <effort>Max</effort>
          <threshold>Low</threshold>
          <onlyAnalyze>thirdstage.framework.*</onlyAnalyze>
          <excludeFilterFile>../thirdstage.framework.parent/src/main/config/findbugs/findbugs-exclude.xml</excludeFilterFile>
          <fork>true</fork>
          <timeout>600000</timeout>
          <maxHeap>512</maxHeap>
        </configuration>
      </plugin>
    </plugins>
  </reporting>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-antrun-plugin</artifactId>
        <executions>
          <execution>
            <id>validate-properties</id>
            <phase>validate</phase>
            <goals>
              <goal>run</goal>
            </goals>
            <configuration>
              <failOnError>true</failOnError>
              <target name="validate-properties">
                <taskdef name="if" classname="ise.antelope.tasks.IfTask" classpathref="maven.plugin.classpath" />

                <if name="antrun.echos.properties" value="true">
                  <echo>Head revision of the project "${project.artifactId}" is
                    ${project.svn.revision}.</echo>
                  <echo>project.artifactId : ${project.artifactId}</echo>
                  <echo>project.basedir : ${project.basedir}</echo>
                  <echo>project.resources.0.directory : ${project.resources.0.directory}</echo>
                  <echo>project.resources[0].directory : ${project.resources[0].directory}</echo>
                  <echo>project.parent : ${project.parent}</echo>
                  <echo>project.parent.groupId : ${project.parent.groupId}</echo>
                  <echo>project.parent.artifactId : ${project.parent.artifactId}</echo>
                  <echo>project.parent.relativePath :
                    ${project.parent.relativePath}</echo>

                  <pathconvert pathsep="${line.separator}" property="classpath.maven.plugin" refid="maven.plugin.classpath" />

                  <pathconvert pathsep="${line.separator}" property="classpath.maven.compile" refid="maven.compile.classpath" />
                  <echo />
                  <echo>Compile-time classpath for Maven :</echo>
                  <echo>${classpath.maven.compile}</echo>

                  <pathconvert pathsep="${line.separator}" property="classpath.maven.runtime" refid="maven.runtime.classpath" />
                  <echo />
                  <echo>Run-time classpath for Maven :</echo>
                  <echo>${classpath.maven.runtime}</echo>

                  <echo>Check Korean output : 한글이 정상적으로 보이나요?</echo>
                  
                  <!-- echo all properties passed to Ant and environment variables prefixed with 'env' -->
                  <echo>All properties given to Ant are : </echo>
                  <property environment="env" />
                  <echoproperties />
                </if>
              </target>
            </configuration>
          </execution>
        </executions>
        <dependencies>
          <dependency>
            <groupId>ise.antelope</groupId>
            <artifactId>ant-antelope-tasks</artifactId>
            <version>3.5.0</version>
          </dependency>
        </dependencies>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-release-plugin</artifactId>
        <configuration>
          <!-- 
          @fixme javaHome doesn't seem to work as is explained.
          You should specify JAVA_HOME env. variable explicitly in your run configuration when running from 
          Eclipse.
           -->
          <!--  <javaHome>c:\lang\jdk1.5</javaHome> -->
          
          <!--  <mavenHome>C:\tools\maven-3.0.3</mavenHome> -->
          <tagBase>${scm.url.base}/main/tags</tagBase>
          <tagNameFormat>@{project.version}</tagNameFormat>
          <username>OhSangMoon</username>
          <autoVersionSubmodules>true</autoVersionSubmodules>
          <pomFileName>pom.xml</pomFileName>
          <arguments>-f pom.xml</arguments>
          
          <!--  not supported by release plugin oer 2.2.2
          <generateReleasePoms>true</generateReleasePoms>
          -->
        </configuration>
      </plugin>

    </plugins>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>2.3.2</version>
          <inherited>true</inherited>
          <configuration>
            <source>1.5</source>
            <target>1.5</target>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-site-plugin</artifactId>
          <version>3.0</version>
          <dependencies>
            <dependency>
              <groupId>org.apache.maven.wagon</groupId>
              <artifactId>wagon-ssh</artifactId>
              <version>2.0</version>
            </dependency>
          </dependencies>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-jar-plugin</artifactId>
          <version>2.3.2</version>
          <configuration>
            <archive>
              <addMavenDescriptor>false</addMavenDescriptor>
              <forced>true</forced>
              <index>true</index>
              <manifest>
                <addClasspath>false</addClasspath>
                <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
                <addExtensions>false</addExtensions>
                <classpathLayoutType>simple</classpathLayoutType>
              </manifest>
              <manifestEntries>
                <Source-Revision>${project.svn.revision}</Source-Revision>
              </manifestEntries>
            </archive>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-assembly-plugin</artifactId>
          <version>2.2.1</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-javadoc-plugin</artifactId>
          <version>2.8</version>
          <configuration>
            <docencoding>${project.reporting.outputEncoding}</docencoding>
            <encoding>${project.build.sourceEncoding}</encoding>
            <links>
              <link>http://download.oracle.com/javase/1.5.0/docs/api/</link>
              <link>http://download.oracle.com/javaee/5/api/</link>
            </links>
            <show>projected</show>
            <splitindex>true</splitindex>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-project-info-reports-plugin</artifactId>
          <version>2.4</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-checkstyle-plugin</artifactId>
          <version>2.7</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-antrun-plugin</artifactId>
          <version>1.7</version>
          <dependencies>
            <dependency>
              <groupId>org.apache.ant</groupId>
              <artifactId>ant</artifactId>
              <version>1.8.2</version>
            </dependency>
          </dependencies>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-release-plugin</artifactId>
          <version>2.2.2</version>
          <configuration>
            <providerImplementations>
              <svn>javasvn</svn>
            </providerImplementations>
          </configuration>
          <dependencies>
            <dependency>
              <groupId>com.google.code.maven-scm-provider-svnjava</groupId>
              <artifactId>maven-scm-provider-svnjava</artifactId>
              <version>1.15</version>
            </dependency>
            <dependency>
              <groupId>org.tmatesoft.svnkit</groupId>
              <artifactId>svnkit</artifactId>
              <version>1.7.0-SNAPSHOT</version>
            </dependency>
          </dependencies>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-scm-plugin</artifactId>
          <version>1.6</version>
          <configuration>
            <providerImplementations>
              <svn>javasvn</svn>
            </providerImplementations>
          </configuration>
          <dependencies>
            <dependency>
              <groupId>com.google.code.maven-scm-provider-svnjava</groupId>
              <artifactId>maven-scm-provider-svnjava</artifactId>
              <version>1.15</version>
            </dependency>
            <dependency>
              <groupId>org.tmatesoft.svnkit</groupId>
              <artifactId>svnkit</artifactId>
              <version>1.7.0-SNAPSHOT</version>
            </dependency>
          </dependencies>
        </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-dependency-plugin</artifactId>
          <version>2.4</version>
        </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-eclipse-plugin</artifactId>
          <version>2.8</version>
          <configuration>
            <!-- the next two item doesn't work on m2e. m2e has its own confgiruation in Eclipse preferences -->
            <downloadSources>true</downloadSources>
            <downloadJavaDocs>true</downloadJavaDocs>
          </configuration>
        </plugin>

        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>properties-maven-plugin</artifactId>
          <version>1.0-alpha-2</version>
        </plugin>
        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>maven-springbeandoc-plugin</artifactId>
          <version>1.0.8-SNAPSHOT</version>
        </plugin>
        <plugin>
          <groupId>com.google.code.maven-svn-revision-number-plugin</groupId>
          <artifactId>maven-svn-revision-number-plugin</artifactId>
          <version>1.7</version>
          <executions>
            <execution>
              <phase>validate</phase>
              <goals>
                <goal>revision</goal>
              </goals>
              <configuration>
                <entries>
                  <entry>
                    <path>${project.basedir}</path>
                    <prefix>project.svn</prefix>
                    <depth>infinity</depth>
                    <reportUnversioned>true</reportUnversioned>
                    <reportIgnored>false</reportIgnored>
                    <reportOutOfDate>false</reportOutOfDate>
                  </entry>
                </entries>
              </configuration>
            </execution>
          </executions>
          <dependencies>
            <dependency>
              <groupId>org.tmatesoft.svnkit</groupId>
              <artifactId>svnkit</artifactId>
              <version>1.7.0-SNAPSHOT</version>
            </dependency>
          </dependencies>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>

Printing details of goals in a specific plugin

Use help plugin with detail and plugin options

$ mvn help:describe -Dplugin=io.swagger.codegen.v3:swagger-codegen-maven-plugin -Ddetail=true

Dependency on local library not in Maven repository and with no POM file

Sometimes your project may have dependency on a JAR file that is not registered to any of Maven repositories and so have no it's own POM file. In this case, you can use <systemPath> element to specify your module's dependency on it.

<dependencies>
  ...
  <dependency>
    <groupId>unknown</groupId>
    <artifactId>abcd</artifactId>
    <version>1.0</version>
    <type>jar</type>
    <scope>system</scope>
    <systemPath>${project.basedir}/lib/abcd.jar</systemPath>
  </dependency>
  ...
</dependencies>

Note that systemPath could be specified only with system scope. You should specify groupId, artifactId, and version 'cause they are mandatory but you can specify any value and don't need pom file.

Escaping expression interpolation

It may necessary not to interpolate Maven expression in resources. In other words, you just want to leave ${some-property} as it is. For this, you can specify the escape string with escapeString parameter of maven-resource-plugin. You can also define maven.resources.escapeString property in your POM file.

For more refer this page : http://maven.apache.org/plugins/maven-resources-plugin/resources-mojo.html#escapeString

Deploying Javadoc JAR file along with

Add configuration for Maven deploy plugin including target repository and path to JAR file.

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-deploy-plugin</artifactId>
        <version>${maven-deploy-plugin.version}</version>
        <configuration>
          <file>${project.build.directory}/${project.artifactId}-${project.version}.jar</file>
          <!-- specify credentials to access the following repoisoty into settings file ('~/.m2/settings.xml') -->
          <repositoryId>skcc-bc-release</repositoryId>
          <url>https://bcrepo.skcc.com/repository/sk-maven-releases</url>
          <pomFile>${project.basedir}/pom.xml</pomFile>
          <javadoc>${project.build.directory}/${project.artifactId}-${project.version}-javadoc.jar</javadoc>
        </configuration>
      </plugin>


Execute 'javadoc:jar' goal first and execute 'deploy:deploy-file' goal instead of 'deploy'.

$ mvn javadoc:jar

...

$ mvn deploy:deploy-file

...

Working with Subversion working copy in format of ver. 1.7

The default configuration of Maven release plugin(maven-release-plugin) up to ver. 2.2.2 or Maven scm plugin(maven-scm-plugin) up to ver. 1.6 can't work correctly with Subversion working copy in format of ver. 1.7.
To solve this problem, you should override the configuration of release plugin or scm plugin to use maven-scm-provider-svnjava and svnkit 1.7.

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-release-plugin</artifactId>
   <version>2.2.2</version>
   <configuration>
      <providerImplementations>
         <svn>javasvn</svn>
      </providerImplementations>
   </configuration>
   <dependencies>
      <dependency>
         <groupId>com.google.code.maven-scm-provider-svnjava</groupId>
         <artifactId>maven-scm-provider-svnjava</artifactId>
         <version>1.15</version>
      </dependency>
      <dependency>
         <groupId>org.tmatesoft.svnkit</groupId>
         <artifactId>svnkit</artifactId>
         <version>1.7.0-SNAPSHOT</version>
      </dependency>                
   </dependencies>
</plugin>
<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-scm-plugin</artifactId>
   <version>1.6</version>
   <configuration>
      <providerImplementations>
         <svn>javasvn</svn>
      </providerImplementations>
   </configuration>
   <dependencies>
      <dependency>
         <groupId>com.google.code.maven-scm-provider-svnjava</groupId>
         <artifactId>maven-scm-provider-svnjava</artifactId>
         <version>1.15</version>
      </dependency>
      <dependency>
         <groupId>org.tmatesoft.svnkit</groupId>
         <artifactId>svnkit</artifactId>
         <version>1.7.0-SNAPSHOT</version>
      </dependency>                
   </dependencies>
</plugin>

For now, svnkit 1.7 has no release and is in snapshot version.

If you let the plugins use svnkit 1.3.x which is default setting as of now, you would meet the exceptions like the following.

Caused by: org.apache.maven.shared.release.scm.ReleaseScmCommandException: Unable to commit files
Provider message:
SVN commit failed.
Command output:
svn: The path ... appears to be part of a Subversion 1.7 or greater working copy.  Please upgrade your Subversion client to use this working copy.
 at org.apache.maven.shared.release.phase.AbstractScmCommitPhase.checkin(AbstractScmCommitPhase.java:168)
 at org.apache.maven.shared.release.phase.AbstractScmCommitPhase.performCheckins(AbstractScmCommitPhase.java:148)
 at org.apache.maven.shared.release.phase.ScmCommitPreparationPhase.runLogic(ScmCommitPreparationPhase.java:75)
 at org.apache.maven.shared.release.phase.AbstractScmCommitPhase.execute(AbstractScmCommitPhase.java:79)
 at org.apache.maven.shared.release.DefaultReleaseManager.rollback(DefaultReleaseManager.java:259)
 at org.apache.maven.shared.release.DefaultReleaseManager.rollback(DefaultReleaseManager.java:238)
 at org.apache.maven.plugins.release.RollbackReleaseMojo.execute(RollbackReleaseMojo.java:56)
 ... 21 more

For more, refer the followings,

Release process

  • overall process
    • prepare-with-pom in dry mode > rollback > prepare > perform


  1. Check whether the free space in file system is enough for the relative servers.
    • server hosting source repository
    • server hosting binary repository
    • server hosting site documentation
  2. Synchronize all project in trunk.
  3. Run release:prepare-with-pom goal in dryRun mode with following options.
    • maven.deploy.skip = false
    • resume = false
    • dryRun = true
    • maven.home = ${env_var:MAVEN_HOME}
  4. Review pom.xml.tag, pom.xml.next, release-pom.xml in each project
    • pom.xml.tag ...
    • pom.xml.next ...
    • release-pom.xml ...
    • fully explicit(with no placeholder) scm information would exist only in pom.xml.tag file of aggregation project and parent project. Url of the scm should end with the name of the project.
  5. Run release:rollback goal with following options.
    • maven.deploy.skip = false
    • resume = false
    • maven.home = ${env_var:MAVEN_HOME}
  6. Check that all pom.xml.tag, pom.xml.next, pom.xml.backup files are deleted.
  7. Run release:prepare goal with following options
    • maven.deploy.skip = false
    • resume = false
    • maven.home = ${env_var:MAVEN_HOME}
  8. Check the new directory for the version and directories for projects under tag directory in source repository.
  9. Run release:perform goal with following options.
    • maven.deploy.skip = false
    • resume = false
    • maven.home = ${env_var:MAVEN_HOME}
  10. Refresh(F5) all projects in Eclipse.
  11. Login on binary repository and check the binaries for projects are uploaded.
  12. Test on the new version

references

Download a specific artifact using mvn command

You can execute dependency plugin even without a pom.xml to download a specific artifact. Note that dependency plugin needs artifact and repoUrl properties specified explicitly.

# mvn org.apache.maven.plugins:maven-dependency-plugin:2.9:get -Dartifact=org.aspectj:aspectjweaver:1.8.1 -DremoteRepositories=central2::::http://repo2.maven.org/maven2/ -Dtransitive=false -Ddest=.

references

Using Maven and Eclipse for Scala/Java mixed project

  • Required tools and plugins
    • Scala IDE
    • m2eclipse-scala
    • scalatest-eclipse-plugin
    • scala-maven-plugin
  • POM
  ...

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.7</java.version>
    <scala.version>2.11</scala.version>
  </properties>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
      </plugin>
      <plugin>
        <groupId>net.alchim31.maven</groupId>
        <artifactId>scala-maven-plugin</artifactId>
        <executions>
          <execution>
            <id>scala-compile</id>
            <phase>process-resources</phase>
            <goals>
              <goal>add-source</goal>
              <goal>compile</goal>
            </goals>
          </execution>
          <execution>
            <id>scala-test-compile</id>
            <phase>process-test-resources</phase>
            <goals>
              <goal>testCompile</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.5.1</version>
          <configuration>
            <source>${java.version}</source>
            <target>${java.version}</target>
          </configuration>
        </plugin>
        <plugin>
          <groupId>net.alchim31.maven</groupId>
          <artifactId>scala-maven-plugin</artifactId>
          <version>3.2.2</version>
          <configuration>
            <source>${java.version}</source>
            <target>${java.version}</target>
            <scalaVersion>${scala.version}</scalaVersion>
            <sourceDir>${project.build.sourceDirectory}/../scala</sourceDir>
            <testSourceDir>${project.build.testSourceDirectory}/../scala</testSourceDir>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.eclipse.m2e</groupId>
          <artifactId>lifecycle-mapping</artifactId>
          <version>1.0.0</version>
          <configuration>
            <lifecycleMappingMetadata>
              <pluginExecutions>
                <pluginExecution>
                  <pluginExecutionFilter>
                    <groupId>net.alchim31.maven</groupId>
                    <artifactId>scala-maven-plugin</artifactId>
                    <versionRange>[1.0.0,)</versionRange>
                    <goals>
                      <goal>add-source</goal>
                      <goal>compile</goal>
                      <goal>testCompile</goal>
                    </goals>
                  </pluginExecutionFilter>
                  <action>
                    <execute>
                      <runOnConfiguration>true</runOnConfiguration>
                      <runOnIncremental>true</runOnIncremental>
                    </execute>
                  </action>
                </pluginExecution>
              </pluginExecutions>
            </lifecycleMappingMetadata>
          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>

  <dependencies>
    <dependency>
      <groupId>org.scalactic</groupId>
      <artifactId>scalactic_${scala.version}</artifactId>
      <version>2.2.6</version>
    </dependency>
    <dependency>
      <groupId>org.scalatest</groupId>
      <artifactId>scalatest_${scala.version}</artifactId>
      <version>2.2.6</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

  ...

Simple tips and troubleshooting

  • The value of Maven property "project.build.directory" in normal case is ${basedir}/target. You can confirm this using the following command line : "mvn help:evaluate -Dexpression=project.build.directory".
  • Solving "[ERROR Unable to determine if resource ... exists in .." error.]
    Or just add <dependency.locations.enabled>false</dependency.locations.enabled> into the <properties> element of POM file.
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-jar-plugin:2.3.2:jar (default-jar) on project ...: Error assembling JAR
  at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:217)
  at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
  at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
  ...
Caused by: org.apache.maven.plugin.MojoExecutionException: Error assembling JAR
  at org.apache.maven.plugin.jar.AbstractJarMojo.createArchive(AbstractJarMojo.java:223)
  ...
Caused by: org.codehaus.plexus.archiver.ArchiverException: Problem creating jar: ... (Access is denied)
  at org.codehaus.plexus.archiver.AbstractArchiver.createArchive(AbstractArchiver.java:892)
 ...
Caused by: java.io.FileNotFoundException: ... (Access is denied)
  at java.io.RandomAccessFile.open(Native Method)
  at java.io.RandomAccessFile.<init>(RandomAccessFile.java:216)
  at org.codehaus.plexus.archiver.zip.ZipFile.<init>(ZipFile.java:150)