Skip to content
Parent pom for maven based projects
Branch: develop
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.mvn
build-docker
src
.appveyor.yml
.editorconfig
.gitconfig
.gitignore
.gitlab-ci.yml
.travis.yml
LICENSE
README.md
ci.sh
codesigning.asc.enc
mvnw
mvnw.cmd
pom.xml

README.md

maven-build

Sonarsonarcloud

Maven Site release (github.io)
Maven site snapshot (infra.top)

Artifacts (release)
Artifacts (snapshot)

Source Repository (github)
Source Repository (gitlab)

Build statusappveyor
pipeline statusgitlab-ci
Build Statustravis-ci

Parent pom for maven based projects

maven-build support code environment segregation and build deploy segregation.

I. Usage

Copy maven-build/src/main/maven/toolchains.xml to ~/.m2/toolchains.xml

cp src/main/maven/toolchains.xml ~/.m2/toolchains.xml
# or
cp src/main/maven/toolchains-darwin.xml ~/.m2/toolchains.xml

Update jdkHome in ~/.m2/toolchains.xml

Set maven-build as parent in maven projects.

    <parent>
        <groupId>cn.home1</groupId>
        <artifactId>maven-build</artifactId>
        <version>${maven-build.version}</version>
    </parent>

No dependency will be imported, maven-build only responsible for software engineering, it does not interfering dependency management.

TODO document about extensions

mvn coreext:check
mvn coreext:install

You need to provide few properties and environment variables, see next chapter.

II. Properties, Environment variables and their default values

1. fetch or deploy

  • private.nexus3.repository

default: http://nexus3:28081/nexus/repository Set this property to a real world url.

  • private.nexus3.repository

default: http://nexus3.localal:28081/nexus/repository Set this property to a real world url.

  • publish.channel

default: snapshot Set this property to 'release' when building release artifact. Note: CI_OPT_GITHUB_GLOBAL_REPOSITORYOWNER

2. maven-surefire-plugin and maven-failsafe-plugin

  • maven.test.skip

default: false

  • maven.integration-test.skip

default: false

  • maven.test.failure.ignore

default: false

3. com.github.eirslett:frontend-maven-plugin

  • frontend.nodeDownloadRoot

default: https://nodejs.org/dist/

  • frontend.npmDownloadRoot

default: http://registry.npmjs.org/npm/-/

Customize these properties only when building front-end projects and default sites are not reachable.

4. report

4.1 sonarqube

  • private.sonarqube.host.url

default: http://sonarqube:9000

  • private.sonarqube.host.url

default: http://sonarqube:9000

Need these properties only when profile 'sonar' is activated.

4.2 maven-checkstyle-plugin and maven-pmd-plugin

  • checkstyle.config.location

default: https://raw.githubusercontent.com/ci-and-cd/maven-build/master/src/main/checkstyle/google_checks_8.10.xml Need to customize when github.com is not reachable.

  • pmd.ruleset.location

default: https://raw.githubusercontent.com/ci-and-cd/maven-build/master/src/main/pmd/pmd-ruleset-6.4.0.xml Need to customize when github.com is not reachable.

  • project.reporting.outputEncoding

default: UTF-8

5. site

  • site.path

default: ${project.artifactId}-${publish.channel} Customize this properties if you want to publish relative projects's site into same parent directory, use same value on relative projects.

  • CI_OPT_OPENSOURCE_GIT_AUTH_TOKEN

default: N/A (blank)

  • CI_OPT_GITHUB_GLOBAL_REPOSITORYOWNER

default: N/A (blank)

Need these properties only when deploy site to github.com.

6. GPG

  • CI_OPT_GPG_KEYNAME

default: N/A (blank)

  • CI_OPT_GPG_PASSPHRASE

default: N/A (blank)

If you see 'gpg: signing failed: Inappropriate ioctl for device' on OSX with gpg (2.2.x) installed by homebrew Edit config files: ~/.gnupg/gpg-agent.conf

allow-loopback-pinentry

~/.gnupg/gpg.conf

use-agent
pinentry-mode loopback

Need these properties only when deploy artifacts into maven central repository.

7. maven central

  • CI_OPT_MAVEN_CENTRAL_USER

Maven central's username

  • CI_OPT_MAVEN_CENTRAL_PASS

Maven central's password

Need these properties only when deploy artifacts into maven central repository.

8. maven-compiler-plugin and maven-javadoc-plugin

  • project.build.sourceEncoding

default: UTF-8

III. Plugins

1. build

com.github.eirslett:frontend-maven-plugin

com.amashchenko.maven.plugin:gitflow-maven-plugin

GitFlow branch model

maven-compiler-plugin with errorprone

Source encoding. Java source and target version see maven-build-java*

maven-enforcer-plugin

Avoid dependency conflict

maven-source-plugin

Build jar of source code

maven-surefire-plugin and maven-failsafe-plugin with includes and excludes configuration

pl.project13.maven:git-commit-id-plugin

2. report

org.asciidoctor:asciidoctor-maven-plugin org.owasp:dependency-check-maven org.codehaus.mojo:animal-sniffer-maven-plugin org.codehaus.mojo:findbugs-maven-plugin org.codehaus.mojo:jdepend-maven-plugin org.codehaus.mojo:taglist-maven-plugin org.codehaus.mojo:versions-maven-plugin maven-checkstyle-plugin maven-jxr-plugin maven-pmd-plugin maven-surefire-report-plugin

3. site

maven-site-plugin com.github.github:site-maven-plugin

maven-antrun-plugin

auto clean '${project.basedir}/src/site/markdown/README.md' '${project.basedir}/src/site/markdown/src/readme' '${project.basedir}/src/site/resources'

maven-resources-plugin

copy '${project.basedir}/README.md' to '${project.basedir}/src/site/markdown' '${project.basedir}/src/readme' to '${project.basedir}/src/site/markdown/src/readme' '${project.basedir}/src/readme' to '${project.basedir}/src/site/resources/src/readme' '${project.basedir}/src/site/markdown/images' to '${project.basedir}/src/site/resources/images'

IV. Profiles

1. build

infrastructure_opensource

Use maven central service. Deploy maven site to github.

infrastructure_private

Use nexus service at organization private (internal) network. Deploy maven site into organization private (internal) mvnsite.

infrastructure_local

Use nexus service at user's local (see docker-nexus3). Deploy maven site into local mvnsite (see docker-proxy).

git-commit-id

Generate src/main/resources/git.properties. activate automatically if '${maven.multiModuleProjectDirectory}/.git/HEAD' exists

mvn-deploy-publish-segregation-by-wagon

activate by set 'mvn.deploy.publish.segregation' to 'true'

jacoco-build

Test coverage report. activate by property 'jacoco' absent (Enabled by default, to disable, set -Djacoco=false)

cobertura

activate by set property 'jacoco' to 'false'

JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk-11.0.2.jdk/Contents/Home" mvn help:active-profiles clean package

JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk-10.jdk/Contents/Home" mvn help:active-profiles clean package

JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk-9.0.4.jdk/Contents/Home" mvn help:active-profiles clean package

JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk1.8.0_201.jdk/Contents/Home" mvn help:active-profiles clean package

2. report

spring-restdocs

activate by set property 'spring-restdocs' to 'true'

reports-for-site

activate by set property 'site' to 'true'

jacoco-report

activate by set property 'jacoco' to 'true'

dependency-check

Generate a detailed dependency report, This takes a long time, disabled by default. activate by set property 'dependency-check' to 'true' (mvn -Ddependency-check=true), need to be used together with site profile of build-site module.

clirr

activate by set property 'clirr' to 'true'

sonar

activate by set property 'sonar' to 'true'

3. site

site

Generate maven site for project, run mvn -Dsite=true site site:stage site:stage-deploy to active this profile and build site, set -Dsite.path=maven-build-snapshot to specify upload directory.

infrastructure_opensource_site_publish

publish project site to github
activate on property 'github.site.publish' is true
needs:
env.CI_OPT_OPENSOURCE_GIT_AUTH_TOKEN
env.CI_OPT_GITHUB_GLOBAL_REPOSITORYOWNER

V. Repositories

central, spring-libs-release, spring-milestone, spring-libs-snapshot

VI. Jira and gitlab integration

Add args on maven site

jira.projectKey         # jira projectKey
jira.user               # jira username
jira.password           # jira password

VII. Appendices

A. Contribution to maven-build

A.1. local install/deploy maven-build

cp src/main/maven/settings-global.xml /usr/local/Cellar/maven/3.6.1/libexec/conf/settings.xml
cp src/main/maven/settings-global.xml ~/.m2/wrapper/dists/apache-maven-3.6.1-bin/38pn40mp89t5c94bjdbeod370m/apache-maven-3.6.1/conf/settings.xml

CI_OPT_INFRASTRUCTURE=opensource ./mvnw -e -U clean install

CI_OPT_INFRASTRUCTURE=opensource CI_OPT_ORIGIN_REPO=true CI_OPT_SONAR=true CI_OPT_SONAR_LOGIN= CI_OPT_SONAR_ORGANIZATION=home1-oss-github ./mvnw -e sonar:sonar

CI_OPT_GITHUB_SITE_PUBLISH="true" CI_OPT_INFRASTRUCTURE=opensource CI_OPT_OPENSOURCE_GIT_AUTH_TOKEN="${CI_OPT_OPENSOURCE_GIT_AUTH_TOKEN}" CI_OPT_SITE="true" CI_OPT_GITHUB_GLOBAL_REPOSITORYOWNER="ci-and-cd" CI_OPT_SITE_PATH_PREFIX="maven-build" ./mvnw -e -U clean install site site-deploy

CI_OPT_GITHUB_SITE_PUBLISH="false" CI_OPT_INFRASTRUCTURE=opensource CI_OPT_OPENSOURCE_MVNSITE_PASSWORD="${CI_OPT_OPENSOURCE_MVNSITE_PASSWORD}" CI_OPT_OPENSOURCE_MVNSITE_USERNAME="${CI_OPT_OPENSOURCE_MVNSITE_USERNAME}" CI_OPT_NEXUS3="https://nexus3.infra.top" CI_OPT_SITE="true" CI_OPT_SITE_PATH_PREFIX="ci-and-cd/maven-build" ./mvnw -e -U clean install site site:stage site:stage-deploy

A.2 Pull request

Please open PR on develop branch.

B. GPG issue

gpg: signing failed: Inappropriate ioctl for device

To solve the problem, you need to enable loopback pinentry mode.

Add this to ~/.gnupg/gpg.conf:

use-agent 
pinentry-mode loopback

And add this to ~/.gnupg/gpg-agent.conf, creating the file if it doesn't already exist:

allow-loopback-pinentry

References

see: https://github.com/APNIC-net/repositoryd/blob/master/pom.xml

see: https://github.com/stevespringett/dependency-check-sonar-plugin/tree/SonarQube_6.x see: https://docs.sonarqube.org/display/PLUG/JaCoCo+Plugin

Java 11 see: https://dzone.com/articles/apis-to-be-removed-from-java-11 see: https://medium.com/criciumadev/its-time-migrating-to-java-11-5eb3868354f9 see: https://dzone.com/articles/migrating-springboot-applications-to-latest-java-v

You can’t perform that action at this time.