我正在使用 Java 11(Adoptium / Temurin)、Maven 和 Netbeans 17 开发模块化 Java Swing 应用程序。即使在基本示例中,我的问题也可以重现:
module-info.java 配置正确。例子:
module ModularMavenApp {
}
这个应用程序的主要入口点是:
package app;
public class ModularMavenApp {
public static void main(String[] args) {
System.out.println(ModularMavenApp.class.getModule().getName());
}
}
这是我的
pom.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>app</groupId>
<artifactId>ModularMavenApp</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.11.0</version>
</plugin>
</plugins>
</build>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<exec.mainClass>app.ModularMavenApp</exec.mainClass>
</properties>
</project>
当我在 NetBeans 17 中运行/调试此应用程序时,它会打印出
null
!这意味着,该应用程序作为未命名的模块运行。
当我创建一个基于 Ant 的 Java 应用程序时,具有相同的
module-info.java
和相同的主类,它会打印出正确的模块名称。
在我的 NetBeans 环境中深入挖掘后,我发现 NetBeans 在启动此应用程序时只设置了
classpath
,但既没有设置 module-path
也没有设置 m
参数。
我尝试在项目的运行配置中手动设置
module-path
和m
(模块)参数,但是参数顺序将是--module-path ... -m ... -Djpda.listen=true ...
。由于-m
参数后面的所有参数都没有被VM解析,而是直接发送给应用程序,这会破坏调试配置。
有一个选项可以手动配置 NetBeans
Run
和 Debug
操作,但我怀疑这是处理此问题的适当方法。
所以,我的问题是:如何配置 NetBeans 以将模块化 Java 应用程序作为模块化 Java 应用程序启动?