How to setup Main class in manifest file in jar produced by NetBeans project
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 foun开发者_如何学JAVAd 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
I'm going to make a summary of the proposed solutions and the one that helped me!
After reading this bug report: bug in the way NetBeans 6.8 creates the jar for a Java Library Project.
Create a manifest.mf file in my project root
Edit manifest.mf. Mine looked something like this:
Manifest-Version: 1.0 Ant-Version: Apache Ant 1.7.1 Created-By: 16.3-b01 (Sun Microsystems Inc.) Main-Class: com.example.MainClass Class-Path: lib/lib1.jar lib/lib2.jar
Open file /nbproject/project.properties
Add line
manifest.file=manifest.mf
Clean + Build of project
Now the .jar is successfully build.
Thank you very much vkraemer
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'.
It is simple.
- Right click on the project
- Go to Properties
- Go to Run in Categories tree
- Set the Main Class in the right side panel.
- Build the project
Thats it. Hope this helps.
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.
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
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...
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:
- In my case lib folder present outside the dist(main jar file) folder.
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
- Class-Path: lib\foldername\jarfilename.jar lib\foldername\jarfilename.jar
Warning: lib folder must be inside the dist folder otherwise jar file do not access your lib folder jar files
精彩评论