在 Maven 存储库中使用已安装的 java 版本
Use installed java version in maven repository
一个简单的问题,但是我没有找到好的解决方案。
我创建了一个与 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 中工作。
您可以根据 JDK:
激活配置文件
<profiles>
<profile>
<activation>
<jdk>1.7</jdk>
</activation>
...
</profile>
</profiles>
虽然您可以通过 profiles activation
管理依赖关系
<profile>
<activation>
<jdk>[9,)</jdk>
</activation>
...对于您图书馆的用户来说,这将不清楚 - 您的图书馆是 with 还是 without 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>
这样您的用户将拥有清晰且可预测的依赖关系。
一个简单的问题,但是我没有找到好的解决方案。
我创建了一个与 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 中工作。
您可以根据 JDK:
激活配置文件<profiles>
<profile>
<activation>
<jdk>1.7</jdk>
</activation>
...
</profile>
</profiles>
虽然您可以通过 profiles activation
管理依赖关系<profile>
<activation>
<jdk>[9,)</jdk>
</activation>
...对于您图书馆的用户来说,这将不清楚 - 您的图书馆是 with 还是 without 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>
这样您的用户将拥有清晰且可预测的依赖关系。