【问题标题】:.jar does not run and cannot find external jar.jar 不运行且找不到外部 jar
【发布时间】:2012-04-14 11:49:51
【问题描述】:

编译后我的 jar 将无法运行。我使用这个 ant 构建脚本

<project name="HelloWorld" basedir="." default="jar">

<property name="src.dir"     value="src"/>

<property name="build.dir"   value="build"/>
<property name="classes.dir" value="${build.dir}/classes"/>
<property name="jar.dir"     value="${build.dir}/jar"/>
<property name="libsSrc" value="libs"/>

<property name="main-class"  value="nat.ise.ApplicationStarter"/>

<path id="classpath">
    <fileset dir="${libsSrc}" includes="*.jar"/>
</path>

<pathconvert property="mf.classpath" pathsep=" ">
    <path refid="classpath"/>
    <mapper>
        <chainedmapper>
            <flattenmapper/>
            <globmapper from="*.jar" to="lib/*.jar"/>
        </chainedmapper>
    </mapper>
</pathconvert>

<target name="clean">
    <delete dir="${build.dir}"/>
</target>

<target name="compile">
    <mkdir dir="${classes.dir}"/>
    <javac srcdir="."  classpathref="classpath"  destdir="${classes.dir}"/>
</target>

<target name="jar" depends="compile">
    <mkdir dir="${jar.dir}"/>
    <jar destfile="${jar.dir}/${ant.project.name}.jar">
        <zipgroupfileset dir="${libsSrc}" includes="*.jar"/>
        <fileset dir="${classes.dir}" includes="**/*.class"/>
        <manifest>
            <attribute name="Main-Class" value="${main-class}"/>
            <attribute name="Class-Path" value="${mf.classpath}"/>
        </manifest>
    </jar>
</target>

</project>

清单是正确的,我正在设法获取一些包含的库,但是从 cmd 提示符运行时出现错误

java.io.FileNotFoundException

它指的是一个JOGL库gluegen-rt-natives-windowsamd64.jar的文件

最初我使用 32 位库从 eclipse 运行项目,现在我已将 64 位库包含在文件夹 libs 中,但它仍然告诉我找不到它们。

实际上我现在可以看到,当我打开 jar 时,所有 .dll 文件的两个副本(我只能假设这是 JOGL 的 32 位版本和 64 位版本的 JOGL)

有没有办法让程序仅使用 32 位库运行?我想减少我必须进行的分发数量。

【问题讨论】:

  • 如果从命令行运行,java -jar 会输出错误吗?
  • 这可能是NoClassDefFound异常的经典案例...照kevingreen所说的去做,看看你得到了什么错误。
  • 我编辑了这个问题来回答你。

标签: java ant jar jogl


【解决方案1】:

我认为我不应该投反对票,但是嘿。

不管怎样,问题是我在 .jars 中引用 .jars,我不认为这会是一个问题,但确实是这样。解决方案是将 .jars(库)放在我编译的应用程序 .jar 旁边,并相应地更新清单。也可以在 .jars 中使用 .jars,但您需要使用另一组类来执行此操作。 Eclipse 有这个,如果你从 Eclipse 中构建可执行的 .jar,你可以在 .jars 中拥有 .jars。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-30
    • 2020-10-04
    • 1970-01-01
    • 2014-06-13
    • 2014-08-16
    • 2011-02-24
    • 1970-01-01
    • 2013-06-30
    相关资源
    最近更新 更多