在maven存储库中使用已安装的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> <

这是一个简单的问题,但我没有找到任何好的解决办法

我创建了一个与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>

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>