首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果~/.m2/toolchains.xml不存在,则忽略使用工具链的maven执行块

如果~/.m2/toolchains.xml不存在,则忽略使用工具链的maven执行块
EN

Stack Overflow用户
提问于 2018-02-09 19:50:13
回答 1查看 441关注 0票数 0

我正在开发一个开源库,它必须能在jre7上正常工作。由于java 9已经发布,我们决定为我们的模块提供module-info.java文件,以便用户可以使用它们,如果他们更喜欢在jre9上使用sdk 9的库(在这种情况下,他们将需要手动输入pom.xml这段代码:

代码语言:javascript
复制
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.7.0</version>
    <configuration>
      <source>9</source>
      <target>9</target>
    </configuration>
  </plugin>

我尝试实现了maven (https://maven.apache.org/plugins/maven-compiler-plugin/examples/module-info.html)提供的解决方案,用jdk7编译整个代码,用jdk9只编译module-info.java文件。这是一段pom.xml

代码语言:javascript
复制
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.7.0</version>
    <executions>
      <execution>
        <id>default-compile</id>
        <configuration>
          <!-- compile everything to ensure module-info contains right entries -->
          <!-- required when JAVA_HOME is JDK 8 or below -->
          <jdkToolchain>
            <version>9</version>
          </jdkToolchain>
          <release>9</release>
        </configuration>
      </execution>
      <execution>
        <id>base-compile</id>
        <goals>
          <goal>compile</goal>
        </goals>
        <!-- recompile everything for target VM except the module-info.java -->
        <configuration>
          <excludes>
            <exclude>module-info.java</exclude>
          </excludes>
        </configuration>
      </execution>
    </executions>
    <!-- defaults for compile and testCompile -->
    <configuration>
      <!-- jdkToolchain required when JAVA_HOME is JDK 9 or above -->
      <jdkToolchain>
        <version>[1.7,9)</version>
      </jdkToolchain>
      <source>1.7</source>
      <target>1.7</target>
    </configuration>
  </plugin>

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-toolchains-plugin</artifactId>
    <version>1.1</version>
    <executions>
      <execution>
        <goals>
          <goal>toolchain</goal>
        </goals>
      </execution>
    </executions>
    <configuration>
      <toolchains>
        <jdk>
          <version>9</version>
        </jdk>
      </toolchains>
    </configuration>
  </plugin>

并且我已经正确配置了~/.m2/toolchains.xml文件。它工作得非常好。但问题是我们需要跳过第一个执行块,在第一个执行块中,所有的东西都是用jdk9 -info编译的,因为我们不想让我们的用户创建toolchains.xml文件并设置Java9。所以我可能想要的是,如果~/.m2目录中没有toolchains.xml,那么跳过下面的代码,只执行第二个执行块,在这个块中,模块信息.java文件被忽略。这有可能吗?我意识到我们仍然可以保留两个分支(一个是私有的,带有两个执行块并使用工具链,另一个是公共的,完全忽略module-info.java文件,但这似乎不是一个优雅的解决方案。

代码语言:javascript
复制
<execution>
    <id>default-compile</id>
    <configuration>
      <!-- compile everything to ensure module-info contains right entries -->
      <!-- required when JAVA_HOME is JDK 8 or below -->
      <jdkToolchain>
        <version>9</version>
      </jdkToolchain>
      <release>9</release>
    </configuration>
  </execution>
EN

回答 1

Stack Overflow用户

发布于 2018-02-09 20:16:39

你可以使用Maven profiles.

  • Wouldn't激活/停用pom的某些部分最好提供两个不同版本的库,例如,版本号为1.0.0--
  1. 和1.0.0-JDK9。然后,您的库的使用者可以根据自己的目的选择合适的库。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48705178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档