我正在开发一个开源库,它必须能在jre7上正常工作。由于java 9已经发布,我们决定为我们的模块提供module-info.java文件,以便用户可以使用它们,如果他们更喜欢在jre9上使用sdk 9的库(在这种情况下,他们将需要手动输入pom.xml这段代码:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>9</source>
<target>9</target>
</configuration>
</plugin>我尝试实现了maven (https://maven.apache.org/plugins/maven-compiler-plugin/examples/module-info.html)提供的解决方案,用jdk7编译整个代码,用jdk9只编译module-info.java文件。这是一段pom.xml
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<executions>
<execution>
<id>default-compile</id>
<configuration>
<!-- compile everything to ensure module-info contains right entries -->
<!-- required when JAVA_HOME is JDK 8 or below -->
<jdkToolchain>
<version>9</version>
</jdkToolchain>
<release>9</release>
</configuration>
</execution>
<execution>
<id>base-compile</id>
<goals>
<goal>compile</goal>
</goals>
<!-- recompile everything for target VM except the module-info.java -->
<configuration>
<excludes>
<exclude>module-info.java</exclude>
</excludes>
</configuration>
</execution>
</executions>
<!-- defaults for compile and testCompile -->
<configuration>
<!-- jdkToolchain required when JAVA_HOME is JDK 9 or above -->
<jdkToolchain>
<version>[1.7,9)</version>
</jdkToolchain>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<plugin>
<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>9</version>
</jdk>
</toolchains>
</configuration>
</plugin>并且我已经正确配置了~/.m2/toolchains.xml文件。它工作得非常好。但问题是我们需要跳过第一个执行块,在第一个执行块中,所有的东西都是用jdk9 -info编译的,因为我们不想让我们的用户创建toolchains.xml文件并设置Java9。所以我可能想要的是,如果~/.m2目录中没有toolchains.xml,那么跳过下面的代码,只执行第二个执行块,在这个块中,模块信息.java文件被忽略。这有可能吗?我意识到我们仍然可以保留两个分支(一个是私有的,带有两个执行块并使用工具链,另一个是公共的,完全忽略module-info.java文件,但这似乎不是一个优雅的解决方案。
<execution>
<id>default-compile</id>
<configuration>
<!-- compile everything to ensure module-info contains right entries -->
<!-- required when JAVA_HOME is JDK 8 or below -->
<jdkToolchain>
<version>9</version>
</jdkToolchain>
<release>9</release>
</configuration>
</execution>发布于 2018-02-09 20:16:39
你可以使用Maven profiles.
https://stackoverflow.com/questions/48705178
复制相似问题