Maven Site release (github.io)
Maven site snapshot (infra.top)
Artifacts (release)
Artifacts (snapshot)
Source Repository (github)
Source Repository (gitlab)
Parent pom for maven based projects
maven-build support code environment segregation and build deploy segregation.
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-1.8.0_181-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.
You need to provide few properties and environment variables, see next chapter.
default: http://nexus3:28081/nexus/repository Set this property to a real world url.
default: http://nexus3.localal:28081/nexus/repository Set this property to a real world url.
default: snapshot Set this property to ‘release’ when building release artifact. Note: CI_OPT_GITHUB_SITE_REPO_OWNER
default: false
default: false
default: false
default: https://nodejs.org/dist/
default: http://registry.npmjs.org/npm/-/
Customize these properties only when building front-end projects and default sites are not reachable.
default: http://sonarqube:9000 - private-sonarqube.host.url default: http://sonarqube:9000
Need these properties only when profile ‘sonar’ is activated.
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.
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.
default: UTF-8
default: ${project.artifactId}-${build.publish.channel} Customize this properties if you want to publish relative projects’s site into same parent directory, use same value on relative projects.
default: N/A (blank) - CI_OPT_GITHUB_SITE_REPO_OWNER default: N/A (blank) - CI_OPT_GITHUB_SITE_REPO_NAME default: N/A (blank)
Need these properties only when deploy site to github.com.
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.
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
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
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’
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’
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’
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_INFRA_OPT_OPENSOURCE_GIT_AUTH_TOKEN
env.CI_OPT_GITHUB_SITE_REPO_OWNER
Add args on maven site
jira.projectKey # jira projectKey jira.user # jira username jira.password # jira password
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
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