簡體   English   中英

使用 Maven 配置文件創建多版本 jar

[英]Create multi-release jar using maven profiles

我正在嘗試使用 maven 和它的編譯器插件創建一個多版本 jar。 我想通過使用配置文件來控制目標 JDK。 我創建了兩個配置文件,一個用於 jdk8,另一個用於 jdk11,以及一個帶有通用選項的構建插件定義。

<profiles>
  <profile>
    <id>target-jdk8</id>
    <activation>
      <jdk>[1.8,)</jdk>
    </activation>

    <build>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>

          <executions>
            <execution>
              <id>compile-jdk8</id>
              <phase>compile</phase>
              <goals>
                <goal>compile</goal>
              </goals>

              <configuration combine.self="append">
                <source>1.8</source>
                <target>1.8</target>

                <excludes>
                  <exclude>module-info.java</exclude>
                </excludes>
              </configuration>
            </execution>
          </executions>
        </plugin>
      </plugins>
    </build>
  </profile>

  <profile>
    <id>target-jdk11</id>
    <activation>
      <jdk>[11,)</jdk>
    </activation>

    <build>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>

          <executions>
            <execution>
              <id>compile-jdk11</id>
              <goals>
                <goal>compile</goal>
              </goals>

              <configuration combine.self="append">
                <multiReleaseOutput>true</multiReleaseOutput>
                <release>11</release>
              </configuration>
            </execution>
          </executions>
        </plugin>
      </plugins>
    </build>
  </profile>
</profiles>


<build>
  <plugins>
    ...
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>3.8.1</version>

      <configuration>
        <verbose>true</verbose>
        <fork>true</fork>

        <compileSourceRoots>
          <compileSourceRoot>${basedir}/src/main/java</compileSourceRoot>
        </compileSourceRoots>

        <compilerArgs>
          <arg>-h</arg>
          <arg>${project.build.directory}/include</arg>
        </compilerArgs>
      </configuration>

      <executions>
        <execution>
          <id>compile-java</id>
          <phase>none</phase>
          <goals>
            <goal>compile</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
    ...
  </plugins>
</build>

我遇到的問題是在運行mvn package -P \\!target-jdk8,target-jdk11時出現error: modules are not supported in -source 6 (use -source 9 or higher to enable modules) 我們是如何獲得 -source 6 的? 在這種情況下,我不是為 JDK 11 構建的嗎? 顯然,我的 maven-compiler-plugin 配置覆蓋沒有從配置文件中應用,但我不明白為什么。

我遇到了同樣的問題,就我而言,我解決了它在 pom 配置中更改版本的問題

<build>
    <sourceDirectory>src/main/java</sourceDirectory>
    <testSourceDirectory>src/test/java</testSourceDirectory>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.3</version>
            <configuration>
                <source>11</source>
                <target>11</target>
            </configuration>
        </plugin>
    </plugins>
    <finalName>${project.artifactId}</finalName>
</build>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM