在maven存储库中使用已安装的java版本
这是一个简单的问题,但我没有找到任何好的解决办法 我创建了一个与java8+兼容的maven项目。我希望,无论何时有人构建项目,maven都应该使用java安装的java版本 换句话说,我想要像这样的对话:在maven存储库中使用已安装的java版本,java,eclipse,maven,m2eclipse,Java,Eclipse,Maven,M2eclipse,这是一个简单的问题,但我没有找到任何好的解决办法 我创建了一个与java8+兼容的maven项目。我希望,无论何时有人构建项目,maven都应该使用java安装的java版本 换句话说,我想要像这样的对话: <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <
<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>
org.apache.maven.plugins
maven编译器插件
3.7.0
${java.version}
${java.version}
${java.version}
对于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>
java-9+
真的
javax.xml.bind
jaxb api
2.3.0
java-8
1.8
它需要在cli(
mvn
命令)、eclipse和IntelliJ中工作。您可以基于JDK激活配置文件:
<profiles>
<profile>
<activation>
<jdk>1.7</jdk>
</activation>
...
</profile>
</profiles>
1.7
...
而您可以通过
[9,)
…对于您的库的用户来说,这是不清楚的-您的库是使用构建的,还是不使用jaxb api构建的
更明确的方法是构建两个独立的模块。对于Java 8:
<artifactId>yourModule</artifactId>
<dependencies>
<!-- Java 8 dependencies -->
</dependencies>
yourModule
对于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>
yourModule-9
${project.groupId}
你的模块
${project.version}
javax.xml.bind
jaxb api
2.3.0
这样,您的用户将具有清晰和可预测的依赖关系。我不明白为什么这会有用。您已经为Java 8编写了代码。然后只需使用
和
进行编译,并将1.8
设置为1.8。这不会妨碍任何人使用Java 11或Java 12来使用该库。我不希望Java-8-com中有jaxb apipilation,因为它已经存在了。我已经这样做了(请参见我的问题)。但是如何将build jdk设置为这个(
和
或
)你知道这两件事是不一样的吗?你可以构建与JDK 11兼容的Java 9吗?是的,这就是我编写或的原因。是否存在jaxb api取决于JDK,而不是Java版本,对吗?因此使用JDK作为配置文件并在1.8
上设置
和
应该是正确的好的。我遗漏了什么?哦,我知道我认为
标签意味着它的构建版本。谢谢
<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>