Some reminder for Maven:
mvn clean package -DskipTests -Dmaven.javadoc.skip=true -Dhttps.protocols=TLSv1.2
1. Use a different settings.xml
mvn --settings ~/.m2/YourOwnSettings.xml clean install
or
mvn -s ~/.m2/YourOwnSettings.xml clean install
2. Jboss tasks:
mvn jboss-as:deploy
mvn jboss-as:redeploy
mvn jboss-as:undeploy
3. Eclipse Maven clean:
(retired)
mvn eclipse:eclipse
mvn eclipse:clean
mvn install
4. set java version:
<project>
[...]
<build>
[...]
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.4</source>
<target>1.4</target>
</configuration>
</plugin>
</plugins>
[...]
</build>
[...]
</project>
or
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
5. Missing Maven dependencies in Eclipse Project
workaround to have an eclipse maven project
6. basic maven structure
src/main/java
- src
- main
- java
- resources
- webapp
- test
- java
- resources
- target
7. packaging:
<packaging>jar</packaging>
8. executing from maven:
add the following plugin to
pom.xml:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<configuration>
<mainClass>com.myorganisationname.common.App</mainClass>
</configuration>
<arguments>
-Dlog4j.configurationFile=/tmp/log4j2.xml
</arguments>
<classpathScope>test</classpathScope>
</plugin>
and run it with:
mvn exec:java
9. skipping test:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
or
mvn install -DskipTests
or
mvn install -Dmaven.test.skip=true
10. Multiple Module Projects
<packaging>pom</packaging>
<modules>
<module>guide-ide-eclipse-site</module>
<module>guide-ide-eclipse-core</module>
<module>guide-ide-eclipse-module1</module>
</modules>
Add the parent to the POMs of the new modules:
<parent>
<groupId>guide.ide.eclipse</groupId>
<artifactId>guide-ide-eclipse</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
mvn install
mvn eclipse:eclipse
http://maven.apache.org/plugins/maven-eclipse-plugin/reactor.html
11. web archetype
mvn archetype:generate -DgroupId=cl.devweb -DartifactId=wls_log_retrieval -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false
12. copy dependencies:
mvn dependency:copy-dependencies -DoutputDirectory=OUTPUT_DIR
13. tomcat
mvn tomcat7:deploy
mvn tomcat7:undeploy
mvn tomcat7:redeploy
14. verbose class
mvn test -DjvmArgs="-verbose:class"
15. web.xml-less
(servlet 3.0+)
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
16. weblogic
mvn com.oracle.weblogic:weblogic-maven-plugin:deploy
mvn com.oracle.weblogic:weblogic-maven-plugin:undeploy
<plugin>
<groupId>com.oracle.weblogic</groupId>
<artifactId>weblogic-maven-plugin</artifactId>
<version>12.1.3-0-0</version>
<configuration>
<adminurl>t3://127.0.0.1:7001</adminurl>
<user>weblogic</user>
<password>welcome1</password>
<upload>true</upload>
<action>deploy</action>
<remote>true</remote>
<verbose>true</verbose>
<source>target/${project.artifactId}.${project.packaging}</source>
<name>${project.artifactId}</name>
<targets>AdminServer</targets>
</configuration>
</plugin>
17. debug flag
mvn -X
or
mvn -e
18. update (when it does not find jar)
mvn -U package
19. dependencies
mvn dependency:tree
-Dverbose
20. skip javadoc
-Dmaven.javadoc.skip=true
21. assigning different https protocol version :
(to avoid:
Received fatal alert: protocol_version)
-Dhttps.protocols=TLSv1.2
22. identifying excluding dependencies
mvn dependency:tree -Dverbose -Dincludes=log4j:log4j
i.e.:
[German@KDU foo-ejemplo (feature/ggonzalez/refactoring)]$ mvn dependency:tree -Dverbose -Dincludes=org.springframework:spring-core
[INFO] Scanning for projects...
[INFO]
[INFO] ---------------< cl.bar:foo-ejemplo >---------------
[INFO] Building foo-ejemplo 1.0.0
[INFO] --------------------------------[ war ]---------------------------------
[INFO]
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ foo-ejemplo ---
[INFO] cl.bar:foo-ejemplo:war:1.0.0
[INFO] \- cl.bar.plataforma.common:foo-ejemplo-lib:jar:1.0.1:compile
[INFO] +- org.springframework:spring-context:jar:4.2.1.RELEASE:compile
[INFO] | +- org.springframework:spring-aop:jar:4.2.1.RELEASE:compile
[INFO] | | \- (org.springframework:spring-core:jar:4.2.1.RELEASE:compile - omitted for duplicate)
[INFO] | +- org.springframework:spring-beans:jar:4.2.1.RELEASE:compile
[INFO] | | \- (org.springframework:spring-core:jar:4.2.1.RELEASE:compile - omitted for duplicate)
[INFO] | +- org.springframework:spring-core:jar:4.2.1.RELEASE:compile
[INFO] | \- org.springframework:spring-expression:jar:4.2.1.RELEASE:compile
[INFO] | \- (org.springframework:spring-core:jar:4.2.1.RELEASE:compile - omitted for duplicate)
[INFO] \- org.springframework:spring-jdbc:jar:4.2.1.RELEASE:compile
[INFO] +- (org.springframework:spring-core:jar:4.2.1.RELEASE:compile - omitted for duplicate)
[INFO] \- org.springframework:spring-tx:jar:4.2.1.RELEASE:compile
[INFO] \- (org.springframework:spring-core:jar:4.2.1.RELEASE:compile - omitted for duplicate)
23. Add local dependencies directly
<dependency>
<groupId>com.sample</groupId>
<artifactId>sample</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/yourJar.jar</systemPath>
</dependency>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<failOnMissingWebXml>true</failOnMissingWebXml>
<webResources>
<resource>
<directory>${project.basedir}/lib</directory>
<targetPath>WEB-INF/lib</targetPath>
</resource>
</webResources>
</configuration>
</plugin>
24. purge local
to clean up old dependencies (when someone changes a library but didn't upgrade the version, so we have a stale version)
mvn clean dependency:purge-local-repository
25. maven options for -XX
export MAVEN_OPTS="-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/"
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<argLine>-Xms512m -Xmx512m -XX:PermSize=256m -XX:+HeapDumpOnOutOfMemoryError -XX:MaxPermSize=512m</argLine>
</configuration>
</plugin>
</plugins>
<properties>
<argLine>-Xms512m -Xmx512m -XX:PermSize=256m
-XX:+HeapDumpOnOutOfMemoryError
-XX:MaxPermSize=512m</argLine>
26. sonar
mvn sonar:sonar -Dsonar.host.url=http://127.0.0.1:9000 -Dsonar.login=d676f79d8ba83cdcf69f38f8471f0284ee242e09
for
remote server:
settings.xml:
<settings 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/settings-1.0.0.xsd">
<pluginGroups>
<pluginGroup>org.sonarsource.scanner.maven</pluginGroup>
</pluginGroups>
<profiles>
<profile>
<id>sonar</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<!-- Optional URL to server. Default value is http://localhost:9000 -->
<sonar.host.url>
http://127.0.0.1:9000
</sonar.host.url>
</properties>
</profile>
</profiles>
</settings>
27.
javadoc 8 issues
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-javadoc-plugin:2.9.1:jar (attach-javadocs) on project foo-api-rest: MavenReportException: Error while creating archive:
[ERROR] Exit code: 1 - /Users/German/development/workspace-oepe/foo-api-rest/src/main/java/cl/bar/plataformacomercial/foo/api/aop/HttpUtil.java:20: warning: no description for @param
[ERROR] * @param request
[ERROR] ^
This can be solved:
https://devwebcl.blogspot.com/2016/01/jdk8-self-closing-element-not-allowed.html
28. maven deploy nexus
before configuring: settings.xml, Plugins, distributionManagement, snapshotRepository
mvn clean deploy
https://www.baeldung.com/maven-deploy-nexus
29. install a library in the local repo
mvn install:install-file -DgroupId=cl.devweb.rbac -DartifactId=test -Dversion=1.0.0 -Dfile=test-rbac.jar -Dpackaging=jar -DgeneratePom=true
30. list system properties from Maven:
mvn help:system
<build>
<plugins>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.6</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<property environment="env" />
<echoproperties />
</target>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
31.
wsdl jar
to be tested jar wsdl client proxies :
<plugin>
<groupId>org.jvnet.jax-ws-commons</groupId>
<artifactId>jaxws-maven-plugin</artifactId>
<version>2.3</version>
<executions>
<execution>
<goals>
<goal>wsimport</goal>
</goals>
<configuration>
<wsdlDirectory>${basedir}/src/main/resources/wsdl/</wsdlDirectory>
<wsdlLocation>wsdl/endpoint_sample_wsdl.wsdl</wsdlLocation>
<sourceDestDir>${basedir}/src/main/java</sourceDestDir>
32.
list of licenses
mvn license:add-third-party
33. .m2 corrupt
Many times when there is a problem downloading jar
files from any maven repository, the quick solution is to delete local
reference at .m2.
34.
integration test (failsafe)
mvn verify
35.
Operating System (OS) profiles:
<profiles>
<profile>
<id>Windows</id>
<activation>
<os>
<family>Windows</family>
</os>
</activation>
<properties>
<script.extension>.cmd</script.extension>
</properties>
</profile>
<profile>
<id>unix</id>
<activation>
<os>
<family>unix</family>
</os>
</activation>
<properties>
<!-- actually it's extension-less (instead of .sh)-->
<script.extension></script.extension>
</properties>
</profile>
</profiles>
36.
creates classpath
mvn dependency:build-classpath
37.
add new repositories to settings.xml
many maven repos have modular repos for release, snapshots, thirdparties...
<repositories>
<repository>
<id>maven-releases</id>
<url>http://localhost:8081/repository/maven-releases/</url>
<layout>default</layout>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>maven-snapshots</id>
<url>http://localhost:8081/repository/maven-snapshots/</url>
<layout>default</layout>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>thirdparty</id>
<url>http://nexus.cl:8081/repository/thirdparty/</url>
<layout>default</layout>
<releases>
<enabled>true</enabled> <!-- fir jdbc 1.7 from wls -->
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
38. hello world antrun
(and writing to a file a timestamp).
mvn antrun:run@tmp-echo
<execution>
<id>tmp-echo</id>
<phase>generate-resources</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<tstamp>
<format property="last.updated" pattern="yyyy-MM-dd hh:mm:ss"/>
</tstamp>
<echo>Hello world!</echo>
<echo message="${last.updated}"/>
<concat destfile="log.txt" append="yes" fixlastline="yes">${last.updated}</concat>
<concat destfile="log.txt" append="yes" fixlastline="yes">
<path path="hola.txt"/>
</concat>
</target>
</configuration>
</execution>
39. Owasp Dependency-check-maven
open source vulnerable libraries.
mvn dependency-check:check
<plugin>
<groupId>org.owasp</groupId>
<artifactId>dependency-check-maven</artifactId>
<version>5.2.4</version>
<executions>
<execution>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>
40. Modernizer Maven Plugin
yet another static
analyzer
<plugin>
<groupId>org.gaul</groupId>
<artifactId>modernizer-maven-plugin</artifactId>
<version>2.0.0</version>
<configuration>
<javaVersion>1.8</javaVersion>
</configuration>
</plugin>
41. springboot startup
mvn spring-boot:run
42. javadoc plugin
mvn javadoc:javadoc
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.9.1</version>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
43. Overriding managed version maven dependency
parent pom spring boot 2.x
version 1.x can override a version easily by replacing properties of a library:
<properties>
<json.version>20180130</json.version>
</properties>
however now with 2.0 it must be avoided to use parent starter and add manually each dependency. From 1, 2 & 3
<dependencyManagement>
<dependencies>
<dependency>
...
...
...
44. logging stdout
Maven can log with:
-l log file
--log-file log.txt
or using tee would be better (we can redirect stdout to a file)
mvn-all2.bat | tee /a log3.txt
45. profile command line
to execute a profile (by using the maven repository) use -P argument:
mvn clean package -P perfil
<profiles>
<profile>
<id>perfil</id>
<repositories>
<repository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>company-releases</id>
<name>company-releases</name>
<url>https://host:port/repository/maven-releases</url>
</repository>
46. internal repository in pom.xml
<project>
...
<repositories>
<repository>
<id>my-internal-site</id>
<url>http://myserver/repo</url>
</repository>
</repositories>
...
</project>
47. docker
mvn clean install dockerfile:build
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.4.0</version>
</plugin>
48. jar without version
<build>
<finalName>${project.artifactId}</finalName>
49. jar executable
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>cl.devweb.test.encrypt.Test1Json</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
50. jar dependencies - fat jar
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>cl.devweb.test.encrypt.Test1Json</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.3.0</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
.
51. copy resources
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.2.0</version>
<executions>
<execution>
<id>copy-resource-one</id>
<phase>package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>C:/Users/germagon/tmp/tmp</outputDirectory>
<resources>
<resource>
<directory>target</directory>
<includes>
<include>oci-cli-oke-fd-${version}-jar-with-dependencies.jar</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>