1

我有一个运行良好的 build.xml 文件。问题是生成的jar文件,我需要在没有'ant run'的情况下运行它

如何运行 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>

“ant run”任务在这个 jar 中运行良好。我如何在没有 ant 的情况下运行这个项目?

4

4 回答 4

5

Use java -cp Main.jar main.Main,-jar用于带有 Manifest 的捆绑 jar,说明将哪个类用作主类。您正在使用-cp(以及在您的 ant 构建文件中)所做的只是将其放在主路径上:您明确指定main.Main为主类,而不是在清单中。

您还应该将其他 jar 放在类路径中(例如-cp lib/example1.jar:lib/example2.jar:Main.jar)。根据匹配的内容**/*.jar,可能会有很多。

于 2012-03-21T14:28:13.013 回答
0

你有没有尝试过:

java -jar Main.jar

您是否检查过 Main.jar 实际上包含您的org/neo4j/graphdb/GraphDatabaseService课程?

于 2012-03-21T14:27:47.847 回答
0

neo4j.jar 在运行时丢失。添加一个类路径参数,如:

java -cp yourLibDir -jar Main.jar
于 2012-03-21T14:28:42.717 回答
0

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

于 2012-03-21T14:29:01.767 回答