Apache NetBeans 31 项目开发实践指南
Apache NetBeans 31 项目开发实践指南,从零创建可被 NetBeans 打开的 Maven Java 项目并完成命令行构建运行、IDE 打开、模块启停与 JVM 内存调优,命令与回显均在 Ubuntu 22.04.5 + JDK21 实测
Apache NetBeans 31 项目开发实践指南
目标:以一个真实 Maven Java 项目为例,演示 Apache NetBeans 31 从用户目录初始化、项目创建、命令行构建运行、IDE 打开到模块启停与 JVM 内存调优的完整开发实践,所有命令与回显均在 Ubuntu 22.04.5 + JDK21 上实测通过。
一、环境信息
- 操作系统:Ubuntu 22.04.5 LTS(amd64)
- JDK:OpenJDK 21.0.12.1(NetBeans 31 运行要求 Java 21+)
- NetBeans:Apache NetBeans IDE 31,安装目录
/opt/netbeans,启动器/opt/netbeans/bin/netbeans - Maven:Apache Maven 3.6.3(
/usr/share/maven) - 示例项目:
com.example:nb-demo:1.0.0(/tmp/nb-demo) - 用户目录:
/root/.netbeans/31(默认);缓存目录:/root/.cache/netbeans/31
二、前置条件
按《Ubuntu 22.04 安装 Apache NetBeans 31 指南》完成安装(方案 A/B zip 或方案 C snap 均可),netbeans --help 可正常输出;另需 Maven 用于命令行构建演示:
sudo apt-get install -y maven
mvn -version
实测回显(前两行):
Apache Maven 3.6.3
Maven home: /usr/share/maven
三、认识用户目录(userdir)
NetBeans 把「安装目录」(只读的程序本体)与「用户目录」(个人配置、缓存、日志)分离。默认用户目录带版本号后缀,首次运行任一命令即自动创建:
netbeans --modules --list > /dev/null 2>&1
ls /root/.netbeans/
ls /root/.cache/netbeans/
实测回显:
31
31
查看版本标记文件:
cat /root/.netbeans/31/.lastUsedVersion
实测回显:
31
用户目录内的关键内容(实测清单):
.lastUsedVersion:最近使用版本号(31);.superId:本机唯一标识(UUID 形式);config/:个人配置(Preferences/、窗口布局Windows2/等);var/log/messages.log:运行日志(含完整系统信息,排障首选);var/cache/:模块缓存(all-modules.dat、all-layers.dat等)。
💡 说明:安装目录与用户目录分离意味着多用户可共享同一份
/opt/netbeans安装,各人配置互不影响(见「九、多用户隔离实践」)。
四、创建可被 NetBeans 打开的 Maven 项目
NetBeans 原生识别 Maven 项目(以 pom.xml 为项目锚点),无需专用项目文件。创建标准布局:
mkdir -p /tmp/nb-demo/src/main/java/com/example
写入 pom.xml(/tmp/nb-demo/pom.xml):
<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>com.example</groupId>
<artifactId>nb-demo</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</project>
写入主类 /tmp/nb-demo/src/main/java/com/example/App.java:
package com.example;
public class App {
public static void main(String[] args) {
System.out.println("Hello from Apache NetBeans demo project");
}
}
💡 说明:
maven.compiler.source/target设为 17 时项目字节码目标为 Java 17,而 IDE 自身仍运行在 Java 21 上,两者互不影响;实际开发中可将项目编译目标按需调整。
五、命令行构建与运行验证
5.1 构建(mvn package)
cd /tmp/nb-demo
mvn -q package
ls target/*.jar
实测回显:
target/nb-demo-1.0.0.jar
5.2 运行(mvn exec:java)
cd /tmp/nb-demo
mvn -q exec:java -Dexec.mainClass=com.example.App
实测输出:
Hello from Apache NetBeans demo project
5.3 直接 java -jar 的已知行为
cd /tmp/nb-demo
java -jar target/nb-demo-1.0.0.jar
实测回显:
no main manifest attribute, in target/nb-demo-1.0.0.jar
💡 说明:默认
maven-jar-plugin不写Main-Class清单项,java -jar因此失败,属 Maven 标准行为;命令行验证用exec:java即可,或在 pom 中为 jar 插件配置 manifest classpath。
六、在 IDE 中打开项目
6.1 命令行打开(--open)
netbeans --open /tmp/nb-demo
在具备图形会话的机器上,该命令会把项目传入正在运行的 NetBeans 实例(无实例则先启动)。实测在无显示环境执行时命令静默返回(退出码 0,仅打印 DISPLAY 警告,不报错也不打开窗口):
/opt/netbeans/platform/lib/nbexec: WARNING: environment variable DISPLAY is not set
⚠️ 前置说明:NetBeans 是 Swing 图形界面应用,打开项目、代码编辑等 GUI 操作需要桌面环境(X Window System);本地桌面直接运行
netbeans,远程服务器用ssh -X或 VNC 获得图形会话后再执行。GUI 窗口内的操作回显无法在无桌面环境采集,以下以官方操作路径文字说明。
6.2 GUI 操作路径(⚠️ 需桌面环境)
- 菜单 File → Open Project…(快捷键
Ctrl+Shift+O),选择/tmp/nb-demo目录,NetBeans 以 Maven 项目类型识别并载入; - 项目树上可见 Source Packages → com.example → App.java;
- 右键项目 Run(或按
F6)即等价于命令行的exec:java,输出窗口显示Hello from Apache NetBeans demo project; - 右键项目 Clean and Build(
Shift+F11)等价于mvn clean package。
6.3 打开历史与项目组
--open 支持带行号打开文件(--open file.java:42)、一次传多个项目目录;--open-group/--list-groups/--close-group 管理项目组(详见《Apache NetBeans 31 常用 CLI 命令与工具详解》)。
七、模块启停实践(按需裁剪功能)
NetBeans 功能由模块(module)组成,服务器/工作机可按需禁用不需要的功能簇。先查看模块清单与状态:
netbeans --userdir /root/.netbeans --modules --list | grep "^org.netbeans.modules.groovy.kit"
实测回显(初始状态):
org.netbeans.modules.groovy.kit 1.65 Enabled
禁用不需要的 Groovy 支持套件:
netbeans --userdir /root/.netbeans --modules --disable org.netbeans.modules.groovy.kit
退出码 0。再次查看确认状态变化:
netbeans --userdir /root/.netbeans --modules --list 2>/dev/null | grep "^org.netbeans.modules.groovy.kit"
实测回显:
org.netbeans.modules.groovy.kit 1.65 Installed
状态由 Enabled 变为 Installed(已安装但禁用),且跨进程持久。
💡 说明:
--modules系列命令在无桌面服务器上完全可运行;模块状态持久化在用户目录config/下。反向--enable的依赖联动与完整规则见《Apache NetBeans 31 常用 CLI 命令与工具详解》。
八、JVM 内存调优实践
NetBeans 是常驻 IDE 进程,与其他服务混部时应限制堆。启动时用 -J 前缀透传 JVM 参数:
netbeans --userdir /root/.netbeans-mem -J-Xms256m -J-Xmx512m --modules --list > /dev/null 2>&1 &
对运行中的进程验证实际生效堆(进程存活期约 20~30 秒,需及时执行):
PID=$(pgrep -x java | head -1)
tr "\0" "\n" < /proc/$PID/cmdline | grep -E "^-Xm[sx]"
jcmd $PID VM.flags | tr ' ' '\n' | grep -E 'MaxHeapSize=|InitialHeapSize=' | awk -F= '{printf "%s = %.0f MB\n", $1, $2/1048576}'
实测回显:
-Xms256m
-Xmx512m
-XX:InitialHeapSize = 256 MB
-XX:MaxHeapSize = 512 MB
-XX:SoftMaxHeapSize = 512 MB
长期固定值写入 /opt/netbeans/etc/netbeans.conf 的 netbeans_default_options(追加 -J-Xms256m -J-Xmx512m),配置文件优先级与完整参数说明见《Apache NetBeans 31 配置参数详解》。
九、多用户隔离实践
同一台服务器上为不同用途使用独立用户目录,--userdir 即可隔离(配置、锁、日志互不干扰):
netbeans --userdir /root/.netbeans-work --modules --list > /dev/null 2>&1
ls /root/.netbeans-work
实测回显:
.lastUsedVersion .superId config var
团队实践建议:
- 共享安装:
/opt/netbeans只读共享,成员各自--userdir(或各自账号下默认~/.netbeans/31); - 缓存目录跟随用户目录:命令行只传
--userdir时缓存默认落在<userdir>/var/cache(conf 注释明确该规则); - 排障时先看各自用户目录的
var/log/messages.log,其头部 System Info 块记录生效的安装目录与用户目录。
十、注意事项
- 所有
netbeans命令行功能在无桌面服务器可用;GUI 操作(打开项目窗口、编辑器)需要桌面环境。 - Maven 项目以
pom.xml为锚点,不要手工创建nbproject/目录;只有 NetBeans 专有 Ant 项目才使用nbproject/。 --modules --list首次运行需初始化缓存,耗时 20~30 秒属正常,后续走缓存加快。- 用户目录锁文件
lock保证同一 userdir 只有一个 IDE 实例;并行测试用不同--userdir。
十一、常见问题
Q1:--open 在服务器上执行后没有反应
无图形会话时命令静默返回(退出码 0)。先确认桌面环境:echo $DISPLAY 有输出才能弹出 IDE 窗口。
Q2:java -jar target/nb-demo-1.0.0.jar 报 no main manifest attribute
见 5.3 节说明,用 mvn exec:java 运行,或在 pom 的 jar 插件中配置 archive/manifest/mainClass。
Q3:项目上右键 Run 报找不到主类
确认 -Dexec.mainClass(命令行)或 GUI Run 配置中的主类全名 com.example.App 与源码包路径一致。
Q4:--modules --list 报 Need to use also --modules, --refresh
--list 必须与 --modules 组合:netbeans --modules --list。
Q5:如何恢复被禁用的模块
GUI:Tools → Plugins → Installed 勾选启用;命令行 --modules --enable 会先要求补齐依赖链(实测提示 Would also need to enable: ...),详见 CLI 命令详解篇。
十二、参考链接
- NetBeans 官方 Java 应用开发文档:
https://netbeans.apache.org/kb/docs/java/ - Apache Maven 入门:
https://maven.apache.org/guides/getting-started/index.html - NetBeans 命令行参数 wiki(conf 内引用):
http://wiki.netbeans.org/FaqWhatIsUserdir