这是一个简单的问题,但我没有找到任何好的解决方案。
我创建了一个与java8 +兼容的maven项目。我希望每当有人构建项目时,maven都应该使用Java安装的Java版本。
换句话说,我想像这样联网:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<compilerVersion>${java.version}</compilerVersion>
</configuration>
</plugin>
对于JAXB,我使用了以下内容:
<profile>
<id>java-9+</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<dependencies>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.0</version>
</dependency>
</dependencies>
</profile>
<profile>
<id>java-8</id>
<activation>
<jdk>1.8</jdk>
</activation>
<dependencies>
<!-- add Java 8 dependencies -->
</dependencies>
</profile>
它需要在cli(mvn
命令),eclipse和IntelliJ中工作。
答案 0 :(得分:1)
虽然您可以通过profiles activation
管理依赖项<profile>
<activation>
<jdk>[9,)</jdk>
</activation>
...对于您图书馆的用户来说,目前尚不清楚-您的图书馆是使用 或无 jaxb-api构建的。
更清晰的方法是构建2个独立的模块。对于Java 8:
<artifactId>yourModule</artifactId>
<dependencies>
<!-- Java 8 dependencies -->
</dependencies>
对于Java 9 +:
<artifactId>yourModule-9</artifactId>
<dependencies>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>yourModule</artifactId>
<version>${project.version}</version>
<excludes>
<!-- Explicitly exclude all irrelevant dependencies. -->
</excludes>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.0</version>
</dependency>
</dependencies>
这样,您的用户将具有清晰可预测的依赖性。
答案 1 :(得分:0)
您可以基于JDK激活配置文件:
<profiles>
<profile>
<activation>
<jdk>1.7</jdk>
</activation>
...
</profile>
</profiles>