我已將 SIMD 代碼添加到使用 Maven 構建的 Java 應用程式中,現在我必須像這樣運行它:
mvn exec:java -Dexec.mainClass="com.path.to.app.MainClass" -Dexec.classpathScope=runtime -Dexec.systemProperties="-da --add-modules=jdk.incubator.vector"
我還創建.mvn/jvm.config了包含以下內容的檔案:
--add-modules=jdk.incubator.vector
最后,pom.xml我在下面添加了以下內容project/build/plugins:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.10.1</version>
<configuration>
<compilerArgs>
<arg>--add-modules=jdk.incubator.vector</arg>
</compilerArgs>
</configuration>
</plugin>
應用程式本身從 Eclipse 和使用 Maven 的命令列運行,如上所示。但是,如果我運行mvn install,JUnit 測驗會失敗:
java.lang.NoClassDefFoundError: jdk/incubator/vector/Vector
...
Caused by: java.lang.ClassNotFoundException: jdk.incubator.vector.Vector
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
以上所有步驟都是在網上找到的。我找不到如何修復 JUnit。請,建議。
OpenJDK 19、Maven 3.8.6、Ubuntu 20.04、JUnit 啟用pom.xml如下:
<junit.version>4.13.2</junit.version>
...
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
uj5u.com熱心網友回復:
據我判斷,編譯很好。這意味著maven-compiler-plugin正確配置,即被<arg>--add-modules=jdk.incubator.vector</arg>拾取。
發生在java.lang.NoClassDefFoundError運行時,即測驗運行時。這顯然意味著--add-modules=jdk.incubator.vector沒有撿起。我相信原因是maven-surefire-plugin沒有正確配置,因此它不會將該值傳播到實際運行測驗的 JVM。默認情況下,該 JVM 與運行 Maven 本身的 JVM 不同。這forkCount由引數管理:
默認設定為 forkCount=1/reuseForks=true,這意味著 maven-surefire-plugin 創建一個新的 JVM 行程來執行一個 Maven 模塊中的所有測驗。
因此,如果您想保持這種狀態(forkCount> 0),那么您必須正確配置maven-surefire-plugin. 就像下面的例子:
<plugins>
[...]
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M7</version> <!-- pick your own version -->
<configuration>
<forkCount>1</forkCount>
<argLine>--add-modules=jdk.incubator.vector</argLine>
</configuration>
</plugin>
[...]
</plugins>
.mvn/jvm.config在您的情況下不起作用,因為此配置適用于 Maven JVM,作為MAVEN_OPTS的替代方案:
所以不再需要 MAVEN_OPTS...您不需要在 MAVEN_OPTS 中使用這些選項或在不同配置之間切換。
關于 MAVEN_OPTS:
此變數包含用于啟動運行 Maven 的 JVM 的引數,并可用于為其提供附加選項。
因此,如果分叉被禁用(forkCount= 0),那么它將起作用,因為所有東西都只有一個 JVM。否則,只有系統屬性會傳遞給分叉的 JVM:
來自主 maven 行程的系統屬性變數也被傳遞給分叉的行程。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/511408.html
