Reputation: 1161
I was writing a simple program using a Java application (not application that has projects, but application within a project; .java) that has a single frame. Both of the files are .java so I can't write a manifest needed by the JAR.
The MyApp.java starts like a class with package, imports then public class MyApp
and has a main function, but it's still .java file! I'm writing it in JDeveloper 11g if it helps.
Any ideas how to make a JAR from these files?
Upvotes: 116
Views: 406258
Reputation: 54
And if the java file imports another dependency like lombok, could do it like this
javac -d ./build -cp .:lombok-1.18.34.jar *.java
cd build
jar cvf d-java-17.jar *
Then inside build dir, you will have a jar named d-java-17.jar, since it's packaged by java17.
Upvotes: 0
Reputation: 3257
Ok this is the solution I would have liked to find, instead here I write it:
First create the directory structure corresponding to the package defined for the .java file, if it is my.super.application
create the directory my
and inside it super
and inside it the .java file App.java
then from command line:
javac -cp /path/to/lib1.jar:/path/to/lib2.jar path/to/my/super/App.java
Notice the above will include multiple libraries, if under windows use "," to separate multiple files otherwise under GNU/Linux use ":" To create a jar file
jar -cvfe App.jar App my/app/
the above will create the application with its corresponding Manifest indicating the App as the main class.
Including the required libraries inside the jar file is not possible using java or jar command line parameters.
You can instead:
nbproject/build-impl.xml
to extract the libraries inside the jar. See below.<target name="-post-jar">
<!-- Empty placeholder for easier customization. -->
<!-- You can override this target in the ../build.xml file. -->
<jar jarfile="${dist.jar}" update="true">
<zipfileset src="${dist.jar}" includes="**/*.class"/>
<zipfileset src="${file.reference.iText-1.0.8.jar}" includes="**/*"/>
<zipfileset src="${file.reference.itextpdf-3.2.1.jar}" includes="**/*"/>
</jar>
</target>
the file.reference
names are found inside project.properties
file after you added the libraries to the Netbeans IDE.
Upvotes: 22
Reputation: 43
If you have one simple main class(let's say Count.class), and want a jar with a MANIFEST file that points to this class as the entry point, you can do this:
jar cfe app.jar Count Count.class
Source: https://docs.oracle.com/javase/tutorial/deployment/jar/appman.html
Upvotes: 2
Reputation: 516
Perhaps the most beginner-friendly way to compile a JAR from your Java code is to use an IDE (integrated development environment; essentially just user-friendly software for development) like Netbeans or Eclipse.
You can always do this all very easily with the command line. Make sure that you are in the same directory as the files targeted before executing a command such as this:
javac YourApp.java
jar -cf YourJar.jar YourApp.class
...changing "YourApp" and "YourJar" to the proper names of your files, respectively.
Upvotes: 4
Reputation: 1982
Simply with command line:
javac MyApp.java
jar -cf myJar.jar MyApp.class
Sure IDEs avoid using command line terminal
Upvotes: 45
Reputation: 51
Here is another fancy way of doing this:
$ ls | grep .java | xargs -I {} javac {} ; jar -cf myJar.jar *.class
Which will grab all the .java files ( ls | grep .java
) from your current directory and compile them into .class (xargs -I {} javac {}
) and then create the jar file from the previously compiled classes (jar -cf myJar.jar *.class
).
Upvotes: 5
Reputation: 6873
Open a command prompt.
Go to the directory where you have your .java files
Create a directory build
Run java compilation from the command line
javac -d ./build *.java
if there are no errors, in the build directory you should have your class tree
move to the build directory and do a
jar cvf YourJar.jar *
For adding manifest check jar command line switches
Upvotes: 143
Reputation: 23631
Often you will want to specify a manifest, like so:
jar -cvfm myJar.jar myManifest.txt myApp.class
Which reads: "create verbose jarFilename manifestFilename", followed by the files you want to include. Verbose means print messages about what it's doing.
Note that the name of the manifest file you supply can be anything, as jar
will automatically rename it and put it into the right directory within the jar file.
Upvotes: 11
Reputation: 19918
This can be done without terminal, directly from IDE. Netbeans, for example.
Upvotes: 6