TL;博士
我遗漏了什么依赖项,允许NetBeans在内部运行OS X集成程序,但是不能清理并构建它到JAR?
我正在尝试制作一个集成到OS X中的Java程序,但我希望将它发布到Windows和Linux上。为此,我使用com.apple.eawt
包的实用程序类。
到目前为止,它一直很棒。我已将我的菜单栏集成到OS X中,我有首选项处理程序和关于处理程序以及所有有趣的东西,它工作得很好...当我在NetBeans中单击运行时。然而!当我点击清理和构建时,我会收到许多这样的错误:
/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?
我试图通过创建一个全新的NetBeans项目,将所有源文件复制到其中,然后单击“清理并构建”来完成重新创建项目的Ajith John的修复。我得到了相同的结果,所以这不起作用。
答案 0 :(得分:3)
即使包com.apple.eawt
位于运行时jar rt.jar
中(如果在OS X上),编译器也会在名为ct.sym
的符号文件中查找包。符号文件仅包含标准Java包,而不包含Apple扩展。
一种解决方案是使用javac选项-XDignore.symbol.file
,如下所示。但是,-XD选项是非标准且未记录的,请参阅here和here。
更好的解决方案可能是以不使用非标准Apple扩展的方式重写代码。
答案 1 :(得分:1)
NetBeans具有硬组织的运行功能。如果我做对了 - 这个函数在NetBeans进程(及其类路径)中编译和运行你的应用程序。 要通过“build”命令解决编译问题,您应该确保构建代理具有所有必需的依赖项:
答案 2 :(得分:1)
我当前的解决方法是清理并运行程序( not build),然后将.class
文件放入.zip
具有格式正确的META_INF
文件夹和manifest.MF
文件的文件夹。然后我将.zip
扩展名重命名为.jar
,并使用这个被黑客攻击的jar文件!