###### tags: Maven Troubleshooting
# Maven Learning Notes
## File encoding
```
[WARNING] File encoding has not been set, using platform encoding GBK, i.e. build is platform dependent!
```
The warning can be fixed by configuring the property `project.build.sourceEncoding` in pom.xml file:
```
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
```
Check [Pom Properties](https://maven.apache.org/pom.html#properties) for more information.
## Maven Toolchain
### [ERROR] Cannot find matching toolchain definitions
```
[INFO] --- maven-toolchains-plugin:1.1:toolchain (default) @ jtcl ---
[INFO] Required toolchain: jdk [ vendor='sun' version='1.6' ]
[ERROR] No toolchain found for type jdk
[ERROR] Cannot find matching toolchain definitions for the following toolchain types:
jdk [ vendor='sun' version='1.6' ]
```
:::info
This happened when I try to run `mvn clean compile` for project [jtcl 2.9.0](https://github.com/jtcl-project/jtcl)
:::
The reason for the failure is that no toolchains.xml configured in ~/.m2/ directory.
In my environment, JDK version is 1.8. So, I need to make change for toolchains.xml and pom.xml file about JDK version.
After fixing JDK path in toolchains.xml, JDK version in pom.xml and copy the toolchains.xml file to ~/.m2 directory, it works.
```
<!-- pom.xml snippet about toolchains plugin configuration -->
<plugin>
<!-- toolchains plugin expects to find $USER/.m2/toolchains.xml -->
<!-- or use the toolchains.xml in this directory -->
<!-- as: mvn (dash)(dash)global-toolchains `pwd`/toolchains.xml -->
<!-- be sure to edit toolchains.xml to set the path to your java 1.6 sdk -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-toolchains-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<goals>
<goal>toolchain</goal>
</goals>
</execution>
</executions>
<configuration>
<toolchains>
<jdk>
<version>1.8</version>
<vendor>sun</vendor>
</jdk>
</toolchains>
</configuration>
</plugin>
<!-- toolchains.xml -->
<?xml version="1.0" encoding="UTF8"?>
<toolchains>
<toolchain>
<type>jdk</type>
<provides>
<version>1.8</version>
<vendor>sun</vendor>
</provides>
<configuration>
<jdkHome>/Program Files (x86)/java/jdk1.8.0_45</jdkHome>
</configuration>
</toolchain>
</toolchains>
[INFO] Scanning for projects...
[INFO]
[INFO] ---------------------------< tcl.lang:jtcl >----------------------------
[INFO] Building jtcl 2.9.0
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ jtcl ---
[INFO] Deleting C:\Users\egugwen\dj\jtcl\target
[INFO]
[INFO] --- maven-toolchains-plugin:1.1:toolchain (default) @ jtcl ---
[INFO] Required toolchain: jdk [ vendor='sun' version='1.8' ]
[INFO] Found matching toolchain for type jdk: JDK[/Program Files (x86)/java/jdk1.8.0_45]
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ jtcl ---
[INFO] Using 'US-ASCII' encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO] Copying 534 resources
[INFO]
[INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ jtcl ---
[INFO] Toolchain in compiler-plugin: JDK[/Program Files (x86)/java/jdk1.8.0_45]
[INFO] Compiling 342 source files to C:\Users\egugwen\dj\jtcl\target\classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 14.634 s
[INFO] Finished at: 2020-09-29T08:18:22+02:00
[INFO] ------------------------------------------------------------------------
```
## Maven Archetype Usage and Problems
### Probleam 1: Archetype not found in any catalog. Falling back to central repository.
```
$ mvn archetype:generate -DarchetypeGroupId=org.apache.maven.demo -DarchetypeArtifactId=surefire-plugin-bug -DarchetypeVersion=1.4
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------< org.apache.maven:standalone-pom >-------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] --------------------------------[ pom ]---------------------------------
[INFO]
[INFO] >>> maven-archetype-plugin:3.2.0:generate (default-cli) > generate-sources @ standalone-pom >>>
[INFO]
[INFO] <<< maven-archetype-plugin:3.2.0:generate (default-cli) < generate-sources @ standalone-pom <<<
[INFO]
[INFO]
[INFO] --- maven-archetype-plugin:3.2.0:generate (default-cli) @ standalone-pom ---
[INFO] Generating project in Interactive mode
[WARNING] Archetype not found in any catalog. Falling back to central repository.
[WARNING] Add a repository with id 'archetype' in your settings.xml if archetype's repository is elsewhere.
Downloading from lmr-cirv-nexus-kista-mirror: https://arm001-eiffel003.rnd.ki.sw.ericsson.se:8443/nexus/content/groups/public/org/apache/maven/demo/surefire-plugin-bug/1.4/surefire-plugin-bug-1.4.pom
[WARNING] The POM for org.apache.maven.demo:surefire-plugin-bug:jar:1.4 is missing, no dependency information available
Downloading from lmr-cirv-nexus-kista-mirror: https://arm001-eiffel003.rnd.ki.sw.ericsson.se:8443/nexus/content/groups/public/org/apache/maven/demo/surefire-plugin-bug/1.4/surefire-plugin-bug-1.4.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 54.565 s
[INFO] Finished at: 2020-09-27T19:20:05+02:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-archetype-plugin:3.2.0:generate (default-cli) on project standalone-pom: The desired archetype does not exist (org.apache.maven.demo:surefire-plugin-bug:1.4) -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
```
:::info
It was wrong usage of `mvn archetype:generate`. The value of `archetypeGroupId, archetypeArtifactId, and archetypeVersion` must be existing archetype template on maven repository server. They are not used for the maven project to create. Those values will be asked interactively during `mvn archetype:generate` command execution.
:::
#### Right usage:
```
$ mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------< org.apache.maven:standalone-pom >-------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] --------------------------------[ pom ]---------------------------------
[INFO]
[INFO] >>> maven-archetype-plugin:3.2.0:generate (default-cli) > generate-sources @ standalone-pom >>>
[INFO]
[INFO] <<< maven-archetype-plugin:3.2.0:generate (default-cli) < generate-sources @ standalone-pom <<<
[INFO]
[INFO]
[INFO] --- maven-archetype-plugin:3.2.0:generate (default-cli) @ standalone-pom ---
[INFO] Generating project in Interactive mode
[INFO] Archetype repository not defined. Using the one from [org.apache.maven.archetypes:maven-archetype-quickstart:5-SNAPSHOT -> https://arm001-eiffel003.rnd.ki.sw.ericsson.se:8443/nexus/content/groups/public] found in catalog remote
Downloading from maven-archetype-quickstart-repo: https://arm001-eiffel003.rnd.ki.sw.ericsson.se:8443/nexus/content/groups/public/org/apache/maven/archetypes/maven-archetype-quickstart/1.4/maven-archetype-quickstart-1.4.pom
Downloaded from maven-archetype-quickstart-repo: https://arm001-eiffel003.rnd.ki.sw.ericsson.se:8443/nexus/content/groups/public/org/apache/maven/archetypes/maven-archetype-quickstart/1.4/maven-archetype-quickstart-1.4.pom (1.6 kB at 8.6 kB/s)
Downloading from maven-archetype-quickstart-repo: https://arm001-eiffel003.rnd.ki.sw.ericsson.se:8443/nexus/content/groups/public/org/apache/maven/archetypes/maven-archetype-bundles/1.4/maven-archetype-bundles-1.4.pom
Downloaded from maven-archetype-quickstart-repo: https://arm001-eiffel003.rnd.ki.sw.ericsson.se:8443/nexus/content/groups/public/org/apache/maven/archetypes/maven-archetype-bundles/1.4/maven-archetype-bundles-1.4.pom (4.5 kB at 40 kB/s)
Downloading from maven-archetype-quickstart-repo: https://arm001-eiffel003.rnd.ki.sw.ericsson.se:8443/nexus/content/groups/public/org/apache/maven/archetypes/maven-archetype-quickstart/1.4/maven-archetype-quickstart-1.4.jar
Downloaded from maven-archetype-quickstart-repo: https://arm001-eiffel003.rnd.ki.sw.ericsson.se:8443/nexus/content/groups/public/org/apache/maven/archetypes/maven-archetype-quickstart/1.4/maven-archetype-quickstart-1.4.jar (7.1 kB at 68 kB/s)
Define value for property 'groupId': org.apache.maven.demo
Define value for property 'artifactId': surefire-plugin-bug
Define value for property 'version' 1.0-SNAPSHOT: :
Define value for property 'package' org.apache.maven.demo: :
Confirm properties configuration:
groupId: org.apache.maven.demo
artifactId: surefire-plugin-bug
version: 1.0-SNAPSHOT
package: org.apache.maven.demo
Y: :
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Archetype: maven-archetype-quickstart:1.4
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: groupId, Value: org.apache.maven.demo
[INFO] Parameter: artifactId, Value: surefire-plugin-bug
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Parameter: package, Value: org.apache.maven.demo
[INFO] Parameter: packageInPathFormat, Value: org/apache/maven/demo
[INFO] Parameter: package, Value: org.apache.maven.demo
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Parameter: groupId, Value: org.apache.maven.demo
[INFO] Parameter: artifactId, Value: surefire-plugin-bug
[INFO] Project created from Archetype in dir: C:\Users\egugwen\dj\124\surefire-plugin-bug
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 47.353 s
[INFO] Finished at: 2020-09-27T19:34:23+02:00
[INFO] ------------------------------------------------------------------------
```
## Maven Surefire Usage and Problems
### Problem 1: Could not delete temp directory
```
[WARNING] Could not delete temp directory C:\Users\egugwen\AppData\Local\Temp\surefire8601791017533718312 because Directory C:\Users\egugwen\AppData\Local\Temp\surefire8601791017533718312 u
nable to be deleted.
```
Question: how to specify the directory where the surefire plugin report is generated?
The default report directory is `${project.build.directory}/surefire-reports` and cannot be changed.
But the problem is it cannot delete temp directory, so could be caused by user privilege. When try to specify `tempDir`, it failed with exception: (this happened in Windows + Git Bash)
```
Caused by: java.lang.IllegalArgumentException: Invalid prefix or suffix
at java.nio.file.TempFileHelper.generatePath (TempFileHelper.java:63)
at java.nio.file.TempFileHelper.create (TempFileHelper.java:127)
at java.nio.file.TempFileHelper.createTempDirectory (TempFileHelper.java:173)
at java.nio.file.Files.createTempDirectory (Files.java:991)
at org.apache.maven.plugin.surefire.AbstractSurefireMojo.createSurefireBootDirectoryInTemp (AbstractSurefireMojo.java:3535)
```
## Maven Compile Usage and Problems
### Problem 1: Source option 5 is no longer supported. Use 6 or later.
This happened when JDK is 11. (JDK 8 has no this problem). To fix it, need to make change on maven-compile plugin configuraiton or use [Maven Compiler 3.8.0+](https://maven.apache.org/plugins/maven-compiler-plugin/compile-mojo.html#source).
> Since 3.8.0 the default value has changed from 1.5 to 1.6 (source and target)
```
wenijinew@localhost (testng-training/basic) > mvn -version
Apache Maven 3.6.1 (Red Hat 3.6.1-5)
Maven home: /usr/share/maven
Java version: 11.0.8, vendor: Red Hat, Inc., runtime: /usr/lib/jvm/java-11-openjdk-11.0.8.10-2.fc32.x86_64
Default locale: sv_SE, platform encoding: UTF-8
OS name: "linux", version: "5.7.14-200.fc32.x86_64", arch: "amd64", family: "unix"
wenijinew@localhost (testng-training/basic) > mvn clean compile
[INFO] Scanning for projects...
[INFO]
[INFO] ----------------< org.testng.training:testng-training >-----------------
[INFO] Building testng-training 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ testng-training ---
[INFO] Deleting /repo/wenijinew/dj/testng-training/basic/target
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ testng-training ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /repo/wenijinew/dj/testng-training/basic/src/main/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ testng-training ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 2 source files to /repo/wenijinew/dj/testng-training/basic/target/classes
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] Source option 5 is no longer supported. Use 6 or later.
[ERROR] Target option 1.5 is no longer supported. Use 1.6 or later.
[INFO] 2 errors
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4.590 s
[INFO] Finished at: 2020-09-27T21:42:42+02:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project testng-training: Compilation failure: Compilation failure:
[ERROR] Source option 5 is no longer supported. Use 6 or later.
[ERROR] Target option 1.5 is no longer supported. Use 1.6 or later.
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
```
```
$ mvn -version
Apache Maven 3.6.1 (d66c9c0b3152b2e69ee9bac180bb8fcc8e6af555; 2019-04-04T21:00:29+02:00)
Maven home: C:\Users\egugwen\dj\apache-maven-3.6.1
Java version: 1.8.0_45, vendor: Oracle Corporation, runtime: C:\Program Files (x86)\Java\jdk1.8.0_45\jre
Default locale: sv_SE, platform encoding: GBK
OS name: "windows 8.1", version: "6.3", arch: "x86", family: "windows"
egugwen@SE-00006414 MINGW64 ~/dj/testng-training/basic (master)
$ mvn clean compile
[INFO] Scanning for projects...
[INFO]
[INFO] ----------------< org.testng.training:testng-training >-----------------
[INFO] Building testng-training 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ testng-training ---
[INFO] Deleting C:\Users\egugwen\dj\testng-training\basic\target
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ testng-training ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory C:\Users\egugwen\dj\testng-training\basic\src\main\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ testng-training ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 2 source files to C:\Users\egugwen\dj\testng-training\basic\target\classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.421 s
[INFO] Finished at: 2020-09-27T21:59:16+02:00
[INFO] ------------------------------------------------------------------------
```
#### Solution
* Use maven-compiler-plugin 3.1 and change configuration to set ```source``` and ```target``` as 1.6
```
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>
wenijinew@localhost (testng-training/basic) > mvn clean compile
[INFO] Scanning for projects...
[INFO]
[INFO] ----------------< org.testng.training:testng-training >-----------------
[INFO] Building testng-training 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ testng-training ---
[INFO] Deleting /repo/wenijinew/dj/testng-training/basic/target
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ testng-training ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /repo/wenijinew/dj/testng-training/basic/src/main/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ testng-training ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 2 source files to /repo/wenijinew/dj/testng-training/basic/target/classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 5.456 s
[INFO] Finished at: 2020-09-27T22:08:01+02:00
[INFO] ------------------------------------------------------------------------
```
* Use maven-compiler-plugin 3.8.0
```
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
</plugins>
</build>
wenijinew@localhost (testng-training/basic) > mvn clean compile
[INFO] Scanning for projects...
[INFO]
[INFO] ----------------< org.testng.training:testng-training >-----------------
[INFO] Building testng-training 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] ****
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ testng-training ---
[INFO] Deleting /repo/wenijinew/dj/testng-training/basic/target
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ testng-training ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /repo/wenijinew/dj/testng-training/basic/src/main/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.8.0:compile (default-compile) @ testng-training ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 2 source files to /repo/wenijinew/dj/testng-training/basic/target/classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 5.354 s
[INFO] Finished at: 2020-09-27T22:15:24+02:00
[INFO] ------------------------------------------------------------------------
```
### Problem 2: diamond operator is not supported in -source 1.5
```
1849 [ERROR] COMPILATION ERROR :-
1850 [INFO] -------------------------------------------------------------
1851 [ERROR] /C:/Users/egugwen/dj/loocsij/src/main/java/org/loocsij/j2se/lamda/LamdaExample1.java:[26,46] diamond operator is not supported in -source 1.5
1852 (use -source 7 or higher to enable diamond operator)
1853 [ERROR] /C:/Users/egugwen/dj/loocsij/src/main/java/org/loocsij/j2se/lamda/LamdaExample1.java:[30,31] lambda expressions are not supported in -source 1.5
1854 (use -source 8 or higher to enable lambda expressions)
1855 [INFO] 2 errors-
```
#### Solution
Add customized compile plugin in pom.xml file, since default source and target might be 1.5 in old version of maven-compiler-plugin.
```
47 <build>
48 <plugins>
49 <plugin>
50 <groupId>org.apache.maven.plugins</groupId>
51 <artifactId>maven-compiler-plugin</artifactId>
52 <version>3.8.0</version>
53 <configuration>
54 <source>1.8</source>
55 <target>1.8</target>
56 </configuration>
57 </plugin>
58 </plugins>
59 </build>
```
## References
* [Maven Build Lifecycle](https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html)
* [POM Reference](https://maven.apache.org/pom.html)