首页 > 解决方案 > 在 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 中工作。

标签: javaeclipsemavenm2eclipse

解决方案


虽然您可以通过配置文件激活来管理依赖关系

<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>

这样,您的用户将拥有清晰且可预测的依赖关系。


推荐阅读