java - 在 Maven 存储库中使用已安装的 java 版本
问题描述
这是一个简单的问题,但我没有找到任何好的解决方案。
我创建了一个与 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 中工作。
解决方案
虽然您可以通过配置文件激活来管理依赖关系
<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>
这样,您的用户将拥有清晰且可预测的依赖关系。
推荐阅读
- python - 当列标题有空格时如何制作namedtuple
- angular - 如何在浏览器刷新时等待服务器的响应以将这些数据保存在 localStorage 中?
- javascript - 在 Ng-repeat 中具有值键的动态 ng-model
- javascript - 组合来自数组对象的多个数组并挑选出唯一的
- r - 如何使用 R data.table 将(“结转”)值从一行和一列(“单元格”)复制到不同的行和列?
- html - 拉斯线的对齐方式不正确
- sql - Redshift 查询数据格式
- python - 下载网页上的所有链接
- swift - 当 SBValue 来自 Swift Dictionary 时,SBData 错误
- c# - 在C#中重置IP地址