为什么 NetBeans 运行 我的程序在 OS X 上,但没有将它构建到 JAR 中?
Why is NetBeans running my program on OS X, but not building it into a JAR?
tl;dr
我缺少什么依赖项允许 NetBeans 运行 OS X 集成程序在内部很好,但不能清理并将其构建到 JAR 中?
我正在尝试制作一个集成到 OS X 中的 Java 程序,但我希望也能将它发布到 Windows 和 Linux 中。为此,我使用了 com.apple.eawt
包的实用程序 类.
到目前为止,一切都很好。我已经将我的菜单栏集成到 OS X 中,我有 Preferences Handlers 和 About Handlers 以及所有有趣的东西,它工作得很好......当我点击 [= NetBeans 中的 51=]。然而!当我点击 Clean and Build 时,我收到很多很多这样的错误:
/my/source/path/MenuBarManager.java:3: error: package com.apple.eawt does not exist
import com.apple.eawt.AboutHandler;
/my/source/path/MenuBarManager.java:62: error: cannot find symbol
private static class MyAboutHandler implements AboutHandler {
^
symbol: class AboutHandler
location: class MyMenuBarManager
/my/source/path/MyMenuBarManager.java:68: error: package AppEvent does not exist
@Override public void handleAbout(AppEvent.AboutEvent ae) {
^
/my/source/path/MyMenuBarManager.java:67: error: method does not override or implement a method from a supertype <br/>
@Override public void handleAbout(AppEvent.AboutEvent ae) {
^
为什么我可以运行它在IDE就好了,但是我不能告诉IDE把它编译成JAR?
已尝试修复
我尝试了 Ajith John 的修复方法,即通过创建一个全新的 NetBeans 项目、将所有源文件复制到其中并单击 "Clean and Build" 来完全重新创建项目。我得到了相同的结果,所以 这没有用。
NetBeans 具有硬组织的 运行 功能。如果我做对了 - 此函数编译并 运行 您在 NetBeans 进程(及其类路径)中的应用程序。
要通过 "build" 命令解决编译问题,您应该确保您的构建代理具有所有必要的依赖项:
- 对于 Maven - 你应该在 pom.xml,
中添加依赖
- 对于 ant - 您应该指定类路径以将必要的 .jar 添加到其中。
PS 包 com.apple.eawt 是 Apple 独有的包。如果您希望在其他平台上启动应用程序,您应该使用简单的 AWT(不是 Apple EAWT)或其他常见的 UI 框架(例如 Swing)。
我当前的解决方法是clean-and-run程序(不是构建),然后放置.class
文件和 .zip
文件夹以及 properly-formatted META_INF
文件夹和 manifest.MF
文件。然后我将 .zip
扩展重命名为 .jar
,并使用这个 hacked-together jarfile!
即使包 com.apple.eawt
在运行时 jar rt.jar
中(如果在 OS X 上),编译器也会在名为 [=12= 的符号文件中查找包].符号文件仅包含标准 Java 包,不包含 Apple 扩展。
一种解决方案是使用 javac 选项 -XDignore.symbol.file
,如下所示。但是,-XD 选项是非标准且未记录的,请参阅 here and here。
更好的解决方案可能是以不使用非标准 Apple 扩展的方式重写代码。
tl;dr
我缺少什么依赖项允许 NetBeans 运行 OS X 集成程序在内部很好,但不能清理并将其构建到 JAR 中?
我正在尝试制作一个集成到 OS X 中的 Java 程序,但我希望也能将它发布到 Windows 和 Linux 中。为此,我使用了 com.apple.eawt
包的实用程序 类.
到目前为止,一切都很好。我已经将我的菜单栏集成到 OS X 中,我有 Preferences Handlers 和 About Handlers 以及所有有趣的东西,它工作得很好......当我点击 [= NetBeans 中的 51=]。然而!当我点击 Clean and Build 时,我收到很多很多这样的错误:
/my/source/path/MenuBarManager.java:3: error: package com.apple.eawt does not exist
import com.apple.eawt.AboutHandler;
/my/source/path/MenuBarManager.java:62: error: cannot find symbol
private static class MyAboutHandler implements AboutHandler {
^
symbol: class AboutHandler
location: class MyMenuBarManager
/my/source/path/MyMenuBarManager.java:68: error: package AppEvent does not exist
@Override public void handleAbout(AppEvent.AboutEvent ae) {
^
/my/source/path/MyMenuBarManager.java:67: error: method does not override or implement a method from a supertype <br/>
@Override public void handleAbout(AppEvent.AboutEvent ae) {
^
为什么我可以运行它在IDE就好了,但是我不能告诉IDE把它编译成JAR?
已尝试修复
我尝试了 Ajith John 的修复方法,即通过创建一个全新的 NetBeans 项目、将所有源文件复制到其中并单击 "Clean and Build" 来完全重新创建项目。我得到了相同的结果,所以 这没有用。
NetBeans 具有硬组织的 运行 功能。如果我做对了 - 此函数编译并 运行 您在 NetBeans 进程(及其类路径)中的应用程序。 要通过 "build" 命令解决编译问题,您应该确保您的构建代理具有所有必要的依赖项:
- 对于 Maven - 你应该在 pom.xml, 中添加依赖
- 对于 ant - 您应该指定类路径以将必要的 .jar 添加到其中。
PS 包 com.apple.eawt 是 Apple 独有的包。如果您希望在其他平台上启动应用程序,您应该使用简单的 AWT(不是 Apple EAWT)或其他常见的 UI 框架(例如 Swing)。
我当前的解决方法是clean-and-run程序(不是构建),然后放置.class
文件和 .zip
文件夹以及 properly-formatted META_INF
文件夹和 manifest.MF
文件。然后我将 .zip
扩展重命名为 .jar
,并使用这个 hacked-together jarfile!
即使包 com.apple.eawt
在运行时 jar rt.jar
中(如果在 OS X 上),编译器也会在名为 [=12= 的符号文件中查找包].符号文件仅包含标准 Java 包,不包含 Apple 扩展。
一种解决方案是使用 javac 选项 -XDignore.symbol.file
,如下所示。但是,-XD 选项是非标准且未记录的,请参阅 here and here。
更好的解决方案可能是以不使用非标准 Apple 扩展的方式重写代码。