当我的某些应用程序的依赖项不在“Libraries”文件夹中时,Netbeans如何运行我的应用程序?

问题描述 投票:0回答:1

我有一个应用程序,当我从Netbeans运行它时可以正常工作,但是当我从Netbeans“Clean and Build”命令生成的可执行jar中运行它时,它无法正常工作。特别是,对于不是我项目的“Libraries”文件夹的类,我得到“java.lang.ClassNotFoundException”(例如,com.sun.xml.internal.ws.spi.ProviderImpl,以及各种com.sun.xml中的其他类)。

我知道当给定的类不在应用程序的类路径中时,抛出ClassNotFoundException。我已经开始手动将所有各种依赖项添加到Netbeans创建的“[Project-Name] \ dist \ lib”文件夹中,但我觉得这不是正确的方法。编辑:这似乎不适用于所有依赖项,即使具有相关类的jar在“[Project-Name] \ dist \ lib”中,也会抛出ClassNotFoundExceptions。

我将“Libraries”文件夹中列出的内容导入“[Project-Name] \ dist \ lib”文件夹没有问题。

我注意到“Libraries”文件夹中未列出的依赖项是各种Java EE组件。由于这个程序是一个连接到Java EE服务器的应用程序客户端,这是我的第一个Java EE项目,我的猜测是有一些基本的Java EE,我不明白导致了这个问题。

我有两个问题:

  1. 当我的某些应用程序的依赖项不在“Libraries”文件夹中时,Netbeans如何运行我的应用程序?
  2. 有没有办法自动将“库”文件夹中未明确列出的所有依赖项导出到“[Project-Name] \ dist \ lib”?

另外,我的项目不是Maven项目。

java java-ee netbeans
1个回答
0
投票

如果我正确理解Netbeans如何工作,它“应该”不会添加到类路径中未列在库文件夹中的东西。 Netbeans在这方面只是构建工具的包装器。在你的情况下哪个似乎是蚂蚁?至少如果你从向导创建一个标准的“Java应用程序”,它就是。所以,当你点击“清理编译”时,你应该在consoloe / output中看到类似的内容:

ant -f /home/daniel/NetBeansProjects/MyApp -Dnb.internal.action.name=rebuild clean jar

这意味着他将在项目的根目录中使用build.xml。您将在该文件中找到存在哪些目标的文档。也是一个运行目标。因此,您应该能够跟踪Netbeans设置的运行应用程序的参数/类路径。你也可以简单地尝试从控制台执行,看看你是否也可以在这里编译和运行它。

另外,我很困惑你得到com.sun.xml.internal.ws.spi.ProviderImpl的classnotfoundexception,因为这是随JDK一起使用的JAX-WS客户端的参考实现的一部分。所以,默认情况下你应该在类路径上有这个。您使用Java 8或9的Java版本是什么?在Netbeans的Libraries部分,您应该能够看到类似JDK 1.8的内容。如果你展开它并查看rt.jar,你会/应该找到你提到的课程。

https://docs.oracle.com/javase/8/docs/technotes/guides/xml/jax-ws/index.html

© www.soinside.com 2019 - 2024. All rights reserved.