0

我正在尝试从 Eclipse 中的 Java 项目创建可执行文件。我知道第一步是创建一个 JAR 文件,因此在搜索该站点后,我能够编译以下 Ant build.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- Configuration of the Ant build system to generate a Jar file --> 
<project name="GraphBuild" default="CreateJar">
  <target name="CreateJar" description="Create Jar file">
     <manifest file="MANIFEST.MF">
        <attribute name="Main-Class" value="GraphEditor" />
     </manifest>
     <jar jarfile="GraphEditor.jar" basedir="." includes="*.class" 
          manifest="MANIFEST.MF" />
  </target>
</project>

当我使用以下命令运行 GraphEditor.jar

java -jar GraphEditor.jar

我收到java.lang.NoClassDefFoundError是因为我的项目中有一些引用的库,并且加载器似乎无法找到它们。我尝试设置 -cp 变量但没有运气。

感谢您的帮助。

4

4 回答 4

1

使用 maven,您可以轻松地创建一个包含所有依赖项的可执行 jar。也许您想使用 maven 而不是 ant。 如何使用 Maven 创建具有依赖关系的可执行 JAR?

于 2013-06-09T17:50:46.590 回答
0

如果我正确阅读了您的问题,我首先想说您不能使用 -cp 和 -jar。如果您在创建 jar 时声明了一个类路径(在 ant @see http://www.tomred.net/tomred-java-jar-meta-inf-manifest.html中),以便它在 MANIFEST 中,那么您需要不包括 -cp。

如果您想使用类路径测试您的 jar,您应该照常做,但将 -jar 交换为 -cp,如下所示。

java -cp lib/;deps/;GraphEditor.jar org.package.to.RunClass

简单地说 -jar 和 -cp 是乘法互斥的。笔记: ”;” Windows中的分隔“:”在Linux中

于 2013-06-11T09:36:33.153 回答
0

您需要适当地附加依赖的 jar 并正确指向class文件的目录。

就像是:

<jar destfile="${jar.dir}/${ant.project.name}.jar" basedir="${class.dir}">
    <manifest>
        <attribute name="Main-Class" value="${main-class}"/>
        <attribute name="Class-Path" value="${lib.dir}/lib1.jar ${lib.dir}/lib2.jar"/>
    </manifest>
</jar>
于 2013-06-09T17:48:21.693 回答
0

您可以将 Class-Path 变量与具有适当位置的依赖 jar 文件一起添加并尝试吗?

于 2013-06-09T17:56:10.360 回答