部署使用Netbeans编译的Java应用程序 - 找不到第三方类

时间:2010-08-12 08:33:05

标签: java deployment

我在Netbeans 6.8中构建了我的应用程序。该应用程序包含对第三方产品的各种引用(例如SQL Server和JIDE的Microsoft数据库驱动程序)。

编译时会生成一个dist文件夹,我认为你可以简单地xcopy到一个位置,它会工作。

当我运行我的应用程序时,只要它在表单中遇到JIDE类的引用,应用程序就会报告错误并退出。

基本上堆栈跟踪是:

java.lang.reflect.InvocationTargetException
Caused by: java.lang.ClassNotFoundException: com.jidesoft.gantt.PeriodBackgroundPainter at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source)

我将JAR文件复制到我的jar文件所在的文件夹中的lib文件夹中 \ MyApp的\ MyJar.jar
\ MyApp \ lib \ all应用程序罐

但是,当我将lib文件夹的内容复制到C:\ Program Files \ Java \ jre6 \ lib \ ext时,一切正常。

我错过了什么吗?我在Vista SP2上运行。

我已经构建了一个新的简单项目,它具有与JIDE组件相同的引用并进行了编译。当我运行jar文件时,应用程序会运行并显示组件。我可以在项目之间看到唯一可见的差异是使用的包的命名约定。我们的主应用程序不符合标准的com.company.application命名,并且包含各种包名。我的应用程序使用com.company.application约定。

干杯,

Andez

2 个答案:

答案 0 :(得分:2)

这可能是类路径问题,当您执行java程序时,需要设置类路径以包含程序所需的所有库。默认情况下,您将加载jre-wide库,这就是为什么将jar文件放在%JAVA_HOME%/ lib或%JAVA_HOME%/ lib / ext中的原因(但是这些jar将可用于您执行的任何代码,您可能没有打算)。

确保在命令行中提供-classpath参数,例如

  

java foo.bar.Baz -classpath。; ./ lib / jide-oss.jar

答案 1 :(得分:0)

欢呼试图帮助乔恩。

我试图在这里简化帖子,因为我认为这是一个类路径问题。让你给我一些incling和办公室里的某人说清楚我看了jar文件的内容。

我们的应用程序包含许多第三方jar和许多软件包 - 其中包括来自第三方的导入类文件。

我遇到了jar中的META-INF文件夹,发现了INDEX.LIST和MANIFEST.MF。我的另一个干净的项目只有MANIFEST.MF文件。我从应用程序jar文件中删除了INDEX.LIST,一切正常。但每次我编译它都会生成INDEX.LIST。我看了一下ANT网站,但看不出为什么会这样生成。

我再次查看了源代码,项目中有一个META-INF包。不太确定它来自哪里或谁把它放在那里。但我删除了它,一切似乎都在工作 - 虽然我只测试了大约5%的应用程序。

干杯,

Andez