【问题标题】:No main manifest attribute using ant to run .jar file?没有使用 ant 运行 .jar 文件的主要清单属性?
【发布时间】:2016-05-23 03:06:57
【问题描述】:

这里有很多关于“没有主要清单属性”错误的帖子,但没有一个真正有任何帮助。

对于初学者,我正在使用 ssh 来解决这个问题,所以我没有使用 eclipse。这是我正在运行的 build.xml 文件:

<project name="MergeSortTester" basedir="." default="main">

    <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="main-class"     value="com.doublell.MergeSortTester"/>


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

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

    <target name="jar" depends="compile">
            <mkdir dir="${jar.dir}"/>
            <jar destfile="${jar.dir}/${ant.project.name}.jar" basedir="${classes.dir}">
                    <manifest>
                            <attribute name="Main_class" value="${main-class}"/>
                    </manifest>
            </jar>
    </target>

    <target name="run" depends="jar">
            <java jar="${jar.dir}/${ant.project.name}.jar" fork="true"/>
    </target>

    <target name="clean-build" depends="clean,jar"/>
    <target name="main" depends="clean,run"/>
</project>

在我的 src 目录中每个 .java 文件的开头:

package com.doublell;

当我在 bash 中输入“ant”命令时,我得到:

Buildfile: /home/students/khaines/GitHubRepos/DoubleLinkedList/build.xml

clean:
   [delete] Deleting directory /home/students/khaines/GitHubRepos/DoubleLinkedList/build

compile:
    [mkdir] Created dir: /home/students/khaines/GitHubRepos/DoubleLinkedList/build/classes
    [javac] /home/students/khaines/GitHubRepos/DoubleLinkedList/build.xml:15: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds
    [javac] Compiling 11 source files to /home/students/khaines/GitHubRepos/DoubleLinkedList/build/classes
    [javac] Note: /home/students/khaines/GitHubRepos/DoubleLinkedList/src/MergeSortTester.java uses unchecked or unsafe operations.
    [javac] Note: Recompile with -Xlint:unchecked for details.

jar:
    [mkdir] Created dir: /home/students/khaines/GitHubRepos/DoubleLinkedList/build/jar
      [jar] Building jar: /home/students/khaines/GitHubRepos/DoubleLinkedList/build/jar/MergeSortTester.jar

run:
     [java] no main manifest attribute, in /home/students/khaines/GitHubRepos/DoubleLinkedList/build/jar/MergeSortTester.jar
     [java] Java Result: 1

main:

BUILD SUCCESSFUL
Total time: 1 second

我怀疑问题出在包名上,我以前从未手动声明过包名。是的,MergeSortTester.java 是带有 main 方法的类。

另外,我主要专注于让一个 .jar 文件运行,但我真的很想能够创建两个 .jar 文件(通过添加另一个使用 MergeSortTester.java 使用的相同其他类的驱动程序类) 并为每个 jar 文件提供单独的运行命令。

【问题讨论】:

    标签: java ant


    【解决方案1】:

    您在 build.xml 中的清单条目应如下所示:

    <manifest>
        <attribute name="Main-Class" value="${main-class}"/>
    </manifest>
    

    正确的属性名称很重要。

    【讨论】:

    • 哇...就是这样。现在完美运行。谢谢!
    猜你喜欢
    • 2018-02-10
    • 2021-07-14
    • 2020-07-28
    • 2021-11-02
    相关资源
    最近更新 更多