Использовать установленную версию Java в репозитории Maven - PullRequest
2 голосов
/ 21 июня 2019

Это простой вопрос, но я не нашел хорошего решения.

Я создал проект maven, который совместим с java8 +.Я хочу, чтобы всякий раз, когда кто-то собирал проект, 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.

Ответы [ 2 ]

1 голос
/ 22 июня 2019

Пока вы МОЖЕТЕ управлять зависимостями через активацию профилей

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

Таким образом, ваши пользователи будут иметь четкие и предсказуемые зависимости.

0 голосов
/ 21 июня 2019

Вы можете активировать профиль на основе JDK:

<profiles>
  <profile>
    <activation>
      <jdk>1.7</jdk>
    </activation>
    ...
  </profile>
</profiles>
...