是否有Maven"阶段"或"目标"来简单地执行Java类的主要方法?我有一个项目,我想通过简单地执行像"mvn run"这样的操作来手动测试.
--add-opens
我最近迁移到 Java 17,由于运行应用程序时的一个依赖项,它带来了一些限制,要求我使用。
我需要在java -jar
运行命令时添加它。现在我找到了这些解决方案:
java --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/sun.util.calendar=ALL-UNNAMED -jar my.jar
Run Code Online (Sandbox Code Playgroud)
pom.xml
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifestEntries>
<Add-Opens>java.base/sun.util.calendar java.base/java.util</Add-Opens>
</manifestEntries>
</archive>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
显然,两者都适合生产。然而,当通过 IntelliJ 运行我的应用程序时,它没有选择我认为是正常的选项。我必须将它们设置在我的运行配置中(顺便说一下,它也提交给我的项目)作为虚拟机参数。
我正在寻找一种方法来自动确保一致性,而不必在我声明附加打开的两个地方并行维护。
编辑:我想知道 argfiles 是否可行。就像我的项目中有一个 argfile 一样,它将在 jar 中引用,并且可以在 y 运行配置中引用。我还没有找到太多证据,但这就是我目前正在追求的道路。
编辑2:我addopens
在项目的根目录添加了一个文件,现在可以从我需要它的各个点引用它。对于测试,我添加了这个,并且它与 IntelliJ 测试和 Maven 测试一起开箱即用:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<!-- This adds the options contained in the addopens file to the test JVM arguments -->
<argLine>@addopens @{argLine}</argLine>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
我还可以将该addopens …
我是IntelliJ IDEA的新手,我想使用它运行一个简单的Maven Quickstart项目.
我按照所有说明操作,项目成功完成.但是当我尝试编译并运行它时,Run
按钮不会被激活.
看起来IntelliJ IDEA无法弄清楚主类的位置.
这是项目层次结构的图片.
问题是什么 ?我该如何解决?
谢谢 !
我试图运行一个简单的mapdb示例,但得到错误:
Exception in thread "main" java.lang.NoClassDefFoundError: kotlin/jvm/internal/Intrinsics
at org.mapdb.DBMaker.fileDB(DBMaker.kt)
at leechies.Truc.main(Truc.java:9)
Caused by: java.lang.ClassNotFoundException: kotlin.jvm.internal.Intrinsics
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 2 more
Run Code Online (Sandbox Code Playgroud)
我的课:
package leechies;
import java.util.concurrent.ConcurrentMap;
import org.mapdb.DB;
import org.mapdb.DBMaker;
public class Truc {
public static void main(String[] args) {
DB db = DBMaker.fileDB("file.db").make();
ConcurrentMap map = db.hashMap("map").createOrOpen();
map.put("something", "here");
db.close();
}
}
Run Code Online (Sandbox Code Playgroud)
我的pomx.xml
<dependencies>
<dependency>
<groupId>org.mapdb</groupId>
<artifactId>mapdb</artifactId>
<version>3.0.3</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
我运行rigth click - > Run as ... - > java application.
所以,我正在尝试将一个工具从 Java 8 迁移到 Java 11。
我做了第一步,让它在没有模块的情况下工作并且代码成功编译。
现在我正在尝试添加 module-info.java,但由于我的工具中使用的库,我首先遇到了问题。有些已经与 Java 11(例如 Lombok)兼容,但有些则不兼容,因此我尝试使用requires和 artifactId 名称导入它们。
但是由于我的 Maven 模型和 Maven 模型构建器依赖性,我似乎卡住了,因为我在构建时遇到以下错误:
[ERROR] the unnamed module reads package org.apache.maven.model.merge from both maven.model.builder and maven.model
[ERROR] module maven.model.builder reads package org.apache.maven.model.merge from both maven.model.builder and maven.model
[ERROR] module maven.model reads package org.apache.maven.model.merge from both maven.model.builder and maven.model
Run Code Online (Sandbox Code Playgroud)
对于这种错误,我该怎么办?似乎我需要两者(如果我评论一个或另一个,构建仍然失败)。这是否意味着我无法将模块添加到我的工具中?
注意:库设置为最新版本(即 3.6.3)