I have the following problem. I have a Java project in my NetBeans IDE 6.8. When I compile it and it produces a .jar file containing everything possible, the META-INF is not right. It doesn't contain the class to be executed - with main() method.
When I click the Run button inside the IDE, everything works. The settings of the project are also set the right way - pointing to a class in my project.
I tried adding a folder META-INF with manifest file but I didn't manage.
Is there a way to do this manually in NetBeans, because I found that if I add the missing Main class in the manifest, everything works.
(I suppose I hit some sort of bug...)
//edit: The result I'm after is that I want the jar that is created with the build of NetBeans to be executable with command:
Quote from Sun Documentation :
When the Main-Class is set in the manifest file, you can run the application from the command line:
java -jar app.jar
This is a problem still as of 7.2.1 . Create a library cause you do not know what it will do if you make it an application & you are screwed.
Did find how to fix this though. Edit nbproject/project.properties
, change the following line to false as shown:
mkdist.disabled=false
After this you can change the main class in properties and it will be reflected in manifest.
The real problem is how Netbeans JARs its projects. The "Class-Path:" in the Manifest file is unnecessary when actually publishing your program for others to use. If you have an external Library added in Netbeans it acts as a package. I suggest you use a program like WINRAR to view the files within the jar and add your libraries as packages directly into the jar file.
How the inside of the jar file should look:
MyProject.jar
Manifest.MF
Main-Class: mainClassFolder.Mainclass
mainClassFolder
Mainclass.class
packageFolder
IamUselessWithoutMain.class
It is simple.
Thats it. Hope this helps.
Don't hesitate but look into your project files after you have built your project for the first time. Look for a manifest file and choose open with notepad.
Add the line:
Main-Class: package.myMainClassName
Where package
is your package and myClassName
is the class with the main(String[] args)
method.
Brother you don't need to set class path just follow these simple steps (I use Apache NetBeans)
Steps:
extract the jar file which you want to add in your project.
only copy those packages (folder) which you need in the project. (do not copy manifest file)
open the main project jar file(dist/file.jar) with WinRAR.
paste that folder or package in the main project jar file.
Those packages work 100% in your project.
warning: Do not make any changes in the manifest file.
Another method:
we need to move lib folder in dist folder.then we set class path from manifest.mf file of main jar file.
Edit the manifest.mf And ADD this type of line
Warning: lib folder must be inside the dist folder otherwise jar file do not access your lib folder jar files
In 7.3 just enable Properties/Build/Package/Copy Dependent Libraries and main class will be added to manifest when building depending on selected target.
Adding manifest.file=manifest.mf into project.properties and creating manifest.mf file in the project directory works fine in NB 6.9 and should work also in NB 6.8.
I read and read and read to figure out why I was getting a class not found error, it turns out the manifest.mf had an error in the line:
Main-Class: com.example.MainClass
I fixed the error by going to Project Properties dialog (right-click Project Files), then Run and Main Class and corrected whatever Netbeans decided to put here. Netbean inserted the project name instead of the class name. No idea why. Probably inebriated on muratina...
It looks like you are running into a bug in the way NetBeans 6.8 creates the jar for a Java Library Project.
The issue implies that there is a work-around.
I have not been able to verify that with NB 6.8 and/or NetBeans 6.9-dev...
You may want to register with the NetBeans.org website/issue tracker and update the issue and add your 'vote'.
Source: Stackoverflow.com