开发者

Deploying Java application compiled with Netbeans - Can't find 3rd party class

开发者 https://www.devze.com 2023-01-11 10:23 出处:网络
I\'ve built my application in Netbeans 6.8.The application contains various references to third party products (such as Microsoft database driver for SQL Server and JIDE).

I've built my application in Netbeans 6.8. The application contains various references to third party products (such as Microsoft database driver for SQL Server and JIDE).

When compiled it produces a dist folder that I thought you could simply xcopy to a location and it would work.

When I run my application, as soon as it encounters a reference in a form to the JIDE classes the application reports a开发者_StackOverflow中文版n error and exits.

Essentially the stack trace is:

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)

I have the JAR files copied into the lib folder in the folder where my jar file is.

\MyApp\MyJar.jar

\MyApp\lib\all application jars

However, when I copy the contents of the lib folder to C:\Program Files\Java\jre6\lib\ext then everything works fine.

Am I missing something? I am running on Vista SP2.

I have built a new simple project with the same reference to the JIDE components and compiled it. When I run the jar file, the application runs up and displays the components. The only visible difference I can see between the projects is naming conventions on the packages used. Our main application does not conform to standard com.company.application naming and has various package names contained within. My application uses the com.company.application convention.

Cheers,

Andez


This may be a classpath problem, when you execute a java program you need to set the classpath to include all the libraries your program needs. By default you will load jre-wide libraries, which is why placing jar files in %JAVA_HOME%/lib or %JAVA_HOME%/lib/ext will work (but these jar's will be available to any code you execute which you probably didn't intend).

Make sure you are providing a -classpath argument in your command line, for example

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


Cheers for trying to help Jon.

I tried to simplify the post on here as I thought it was a classpath issue. Having you giving me some incling and something someone in the office said about the manifest I had a look at the jar file contents.

Our application consists of many 3rd party jars and many packages - which included imported class files from the 3rd parties.

I came across the META-INF folder in the jar and noticed an INDEX.LIST and MANIFEST.MF. My other clean project only had the MANIFEST.MF file. I deleted the INDEX.LIST from our application jar file and everything worked. But everytime I compiled it generated the INDEX.LIST. I had a look on the ANT site but could not see why this was being generated.

I looked at the souce code again and there was a META-INF package in the project. Not too sure where it came from or who put it there. But I deleted it and everything seems to work at the minute - although I've only tested about 5% of the application.

Cheers,

Andez

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号