首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有工具链的Maven exec插件无法启用预览功能。

带有工具链的Maven exec插件无法启用预览功能。
EN

Stack Overflow用户
提问于 2022-09-23 16:20:26
回答 1查看 117关注 0票数 1

我想体验最新的Java 19特性,也不要更改默认的Java ( Java 17)。

因此,我在~/.m2中创建了一个toolchains.xml,并定义了如下所示的jdk类型工具链。

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<toolchains>
  <!-- JDK toolchains -->
  <toolchain>
    <type>jdk</type>
    <provides>
      <version>1.8</version>
      <vendor>oracle</vendor>
    </provides>
    <configuration>
      <jdkHome>D:/jdks/jdk8</jdkHome>
    </configuration>
  </toolchain>
  <toolchain>
    <type>jdk</type>
    <provides>
      <version>11</version>
      <vendor>oracle</vendor>
    </provides>
    <configuration>
      <jdkHome>D:/jdks/jdk11</jdkHome>
    </configuration>
  </toolchain>
   <toolchain>
    <type>jdk</type>
    <provides>
      <version>17</version>
      <vendor>oracle</vendor>
    </provides>
    <configuration>
      <jdkHome>D:/jdks/jdk17</jdkHome>
    </configuration>
  </toolchain>
    <toolchain>
    <type>jdk</type>
    <provides>
      <version>19</version>
      <vendor>oracle</vendor>
    </provides>
    <configuration>
      <jdkHome>D:/jdks/jdk-19</jdkHome>
    </configuration>
  </toolchain>
  <!-- other toolchains -->
  <toolchain>
    <type>netbeans</type>
    <provides>
      <version>15</version>
    </provides>
    <configuration>
      <installDir>D:/devtools/netbeans</installDir>
    </configuration>
  </toolchain>
</toolchains>

然后我在我的项目POM中添加了以下插件。

代码语言:javascript
复制
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.10.1</version>
    <configuration>
        <compilerArgs>
            <arg>--enable-preview</arg>             
        </compilerArgs>
        <encoding>${project.build.sourceEncoding}</encoding>
    </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>19</version>
                <vendor>oracle</vendor>
            </jdk>
        </toolchains>
    </configuration>
</plugin>
<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>3.1.0</version>
    <configuration>
        <mainClass>com.example.demo.RecordPatternExample</mainClass>
        <commandlineArgs>--enable-preview</commandlineArgs>
        <arguments>
            <argument>--enable-preview</argument>
        </arguments>
    </configuration>
</plugin>

按照建议的在这个问题上,我还将--enable-preview添加到. .mvn/jvm.config中。

但是在命令行中运行项目时。

代码语言:javascript
复制
mvn clean package exec:java

我还是有这样的例外。

代码语言:javascript
复制
[INFO] --- maven-compiler-plugin:3.10.1:compile (default-compile) @ record-pattern ---
[INFO] Toolchain in maven-compiler-plugin: JDK[D:/jdks/jdk-19]
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to D:\hantsylabs\java-sandbox\record-pattern\target\classes
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ record-pattern ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory D:\hantsylabs\java-sandbox\record-pattern\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.10.1:testCompile (default-testCompile) @ record-pattern ---
[INFO] Toolchain in maven-compiler-plugin: JDK[D:/jdks/jdk-19]
[INFO] Changes detected - recompiling the module!
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ record-pattern ---
[INFO] Toolchain in surefire-plugin: JDK[D:/jdks/jdk-19]
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ record-pattern ---
[INFO] Building jar: D:\hantsylabs\java-sandbox\record-pattern\target\record-pattern-1.0-SNAPSHOT.jar
[INFO]
[INFO] --- exec-maven-plugin:3.1.0:java (default-cli) @ record-pattern ---
[WARNING]
java.lang.UnsupportedClassVersionError: com/example/demo/RecordPatternExample has been compiled by a more recent version of the Java Runtime (class file version 63.65535), this version of the Java Runtime only recognizes class file versions up to 61.0

显然,--enable-preview选项没有在配置了JDK的exec:java和工具链中应用,但是它在maven编译器插件中工作得很好。

样本工程是在我的Github上共享的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-12 10:33:20

对此进行了调查,在我看来,这似乎是不可能做到的:exec:java似乎没有工具链支持。如果您查看用于ExecJavaMojo源代码exec:java,您会发现它没有对工具链的引用,因此无法工作。将其与拥有它们的ExecMojo源代码进行比较。

如果您将配置改为使用exec:exec,则安装程序应该可以工作:

代码语言:javascript
复制
<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>3.1.0</version>
    <configuration>
        <executable>java</executable>
        <arguments>
            <argument>--enable-preview</argument>
            <argument>-classpath</argument>
            <classpath/>
            <argument>com.example.demo.RecordPatternExample</argument>
        </arguments>
    </configuration>
</plugin>

使用配置了工具链的mvn exec:exec进行测试运行:

代码语言:javascript
复制
[INFO] --- exec-maven-plugin:3.1.0:exec (default-cli) @ record-pattern ---
[INFO] Toolchain in exec-maven-plugin: JDK[C:/Program Files/Java/jdk-19+36]
Hantsy Bai
Circle with r:1.2, area:4.5216
Square with x:1.2, area:1.44
Rectangle with x: 1.0 and y:2.0, area:2.0
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.350 s
[INFO] Finished at: 2022-10-12T13:25:56+03:00
[INFO] Final Memory: 10M/25M
[INFO] ------------------------------------------------------------------------
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73830548

复制
相关文章

相似问题

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