问题
I have a build.xml file that works fine. The problem is that the generated jar file, and I need to run it without 'ant run'
How can I run the jar file? running with
java -jar Main.jar main.Main
gives me:
Exception in thread "main" java.lang.NoClassDefFoundError: org/neo4j/graphdb/GraphDatabaseService
This is how I'm creating the jar file (build.xml):
<target name="jar" depends="compile">
<mkdir dir="${jar.dir}"/>
<jar destfile= "${jar.dir}/${ant.project.name}.jar" basedir="${build.dir}">
<manifest>
<attribute name="Main-Class" value="${main-class}"/>
</manifest>
</jar>
</target>
<target name="compile">
<mkdir dir="${build.dir}"/>
<mkdir dir="${build.dir}/${conf.dir}"/>
<javac srcdir="${src.dir}" destdir="${build.dir}" classpathref="classpath" includeantruntime="false"/>
<copy todir="${build.dir}/${conf.dir}">
<fileset dir="${conf.dir}"/>
</copy>
</target>
<target name="run" >
<java fork="true" classname="${main-class}">
<classpath>
<path refid="classpath"/>
<path location="${jar.dir}/${ant.project.name}.jar"/>
</classpath>
</java>
</target>
<path id="classpath">
<fileset dir="${lib.dir}" includes="**/*.jar"/>
</path>
The "ant run" task works fine with this jar. How can I run this project without ant?
回答1:
Use java -cp Main.jar main.Main
, -jar
is for bundled jars with a Manifest saying which class is to be used as the main class. What you're doing with -cp
(and within your ant build file) is just putting it on the main path: you're specifying main.Main
as the main class explicitly, not within a manifest.
You should also put the other jars on the classpath (e.g. -cp lib/example1.jar:lib/example2.jar:Main.jar
). Depending on what matches **/*.jar
, there may be a number of them.
回答2:
Have you tried:
java -jar Main.jar
Have you checked that Main.jar does in fact include your org/neo4j/graphdb/GraphDatabaseService
class?
回答3:
You need to add -classpath xxx.jar in your command line
回答4:
The neo4j.jars are missing at runtime. Add a classpath parameter like:
java -cp yourLibDir -jar Main.jar
来源:https://stackoverflow.com/questions/9806566/run-a-jar-file-generated-by-ant-in-command-line