问题描述
对this question的补充,如何确定mvn compile
中使用的实际java版本?
我正在编译 FasterXML/jackson-databind 如下,但不能确定 java 版本:
$ git clone https://github.com/FasterXML/jackson-databind.git
$ cd jackson-databind
$ mvn compile
$ javap -verbose ./target/classes/com/fasterxml/jackson/databind/PropertyNamingStrategy.class | grep "major"
major version: 52
所以根据this post,java版本是1.8
。
但是当我 grep pom.xml
时,我没有看到:
$ grep -wn "source" pom.xml
245: <id>add-test-source</id>
248: <goal>add-test-source</goal>
252: <source>src/test-jdk14/java</source>
265: <source>14</source>
我只看到 java 14 (?) 我错过了什么?
解决方法
它在新的发布标签中,而不是源代码或编译-
您可以使用 maven 用户属性引用它
NB Release 会覆盖源值和目标值 - 例如源 = 1.8,目标 = 1.8,发布 = 14, 在 JDK 14 中编译和发布
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven.compiler.version}</version>
<configuration>
<release>${maven.compiler.source}</release>
,
父 POM 是 jackson-base
,它确实设置了 java 版本:https://github.com/FasterXML/jackson-bom/blob/e60567a0e778f749d9e39e2c245486a44fbc52f9/base/pom.xml
<javac.src.version>1.8</javac.src.version>
<javac.target.version>1.8</javac.target.version>
<maven.compiler.source>${javac.src.version}</maven.compiler.source>
<maven.compiler.target>${javac.target.version}</maven.compiler.target>
您可以使用 mvn help:effective-pom
maven 使用的版本可以在 POM 文件中找到,如:
<properties>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.source>1.8</maven.compiler.source>
</properties>
或者替代
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>