2012-03-21 165 views
1

我有一個可以正常工作的build.xml文件。 問題是,生成的jar文件,我需要運行它沒有'螞蟻運行'在命令行中運行一個jar文件(由ant生成)

我該如何運行jar文件? 與

java -jar Main.jar main.Main 

運行給我:

Exception in thread "main" java.lang.NoClassDefFoundError: org/neo4j/graphdb/GraphDatabaseService 

這是我如何創建jar文件(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> 

「蟻運行」 任務工程用這個罐子很好。 如何在沒有螞蟻的情況下運行此項目?

回答

5

使用java -cp Main.jar main.Main, -jar是用於具有Manifest的捆綁式罐子,其表示將使用哪個類作爲主類。你在-cp(以及你的ant構建文件中)所做的只是把它放在主路徑上:你明確指定main.Main作爲主類,而不是在清單中。

您還應該將其他jar添加到類路徑中(例如-cp lib/example1.jar:lib/example2.jar:Main.jar)。根據什麼匹配**/*.jar,可能有一些他們。

+0

正確:java -cp lib/lib1.jar:lib/lib2.jar:.... Main.jar main.Main求解 - 謝謝 – Orange 2012-03-21 15:26:09

0

你試過:

java -jar Main.jar 

是否檢查main.jar文件實際上不包括你的org/neo4j/graphdb/GraphDatabaseService類?

+0

嗨凱西,給了我同樣的錯誤(其他的.jar錯過):java.lang.NoClassDefFoundError: org/neo4j/graphdb/GraphDatabaseService謝謝 – Orange 2012-03-21 14:30:50

+0

org/neo4j/graphdb/GraphDatabaseService是另一個jar文件。 用'java -cp lib/lib1.jar:lib/lib2.jar:....:Main.jar main.Main'解決了問題。謝謝 – Orange 2012-03-21 15:27:35

0

neo4j.jars在運行時丟失。添加類路徑參數,如:

java -cp yourLibDir -jar Main.jar 
+0

它應該是'java [-options] class'或'java [-options] -jar jarfile',不能同時使用(請參閱'java -help')。另外,你需要一一列舉lib目錄中的jar文件。 – Bruno 2012-03-21 14:34:40

+0

是-cp shuold正好在-jar jarfile之前。但在我的Java幫助中說:「-cp <目錄和zip/jar文件的類搜索路徑>」。 – Stefan 2012-03-21 14:40:09

+0

你有'-jar Main.jar'和'main.Main',那就是問題所在。關於類路徑上的jar,如果您在命令行運行應用程序時沒有經歷* *具有*逐個添加每個jar的痛苦,那麼您還沒有完成足夠的Java ;-)或者,已經能夠使用正確的工具(如螞蟻)。這個幫助分別是指「類的目錄」和「zip/jar」文件。 – Bruno 2012-03-21 14:43:32

0

您需要添加-classpath xxx.jar在命令行中