无法使用Ant build xml查找或加载主类

时间:2018-05-22 16:46:49

标签: java xml class ant

我很确定这是我在某个地方犯的一个愚蠢的错误,但我只是看不出有什么不对。

我正在使用Ant从主项目和一些外部库中构建jar。

这是我的目录结构:

 project
 |--build/
 |--build.xml
 |--lib
 |--src

这是我的build.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
 <project name="Proj1" default="default" basedir=".">
  <description>Builds, tests, and runs the project Proj1</description>
   <property name="build.dir"   value="./build"/>
 <target name="clean">
  <delete dir="${build.dir}"/>
 </target>

  <path id="class.path">
    <fileset dir="./lib">
      <include name="**/*.jar" />
    </fileset>
  </path>

  <target name="compile">
    <mkdir dir="./build/classes"/>
    <javac srcdir="./src" destdir="./build/classes">
      <classpath refid="class.path" />
    </javac>
  </target>

  <target name="jar">
     <jar destfile="Proj1.jar" basedir="./build/classes" zip64Mode="always">
       <zipgroupfileset dir="lib" includes="*.jar"/>
       <manifest>
          <attribute name="Main-Class" value="pt.nomad.Kafka.Main"/>
       </manifest>
     </jar>
</target>
</project>

当我跑步时:

ant clean && ant compile && ant jar

一切似乎都运作良好,并创建了一个jar。但是,如果我尝试使用:

执行jar
java -jar Proj1.jar

它返回:

Error: Could not find or load main class pt.nomad.Kafka.Main

请注意,我已经定义了一个清单,其中我说Main Class是pt.nomad.Kafka.Main

如果我跑:

jar tf Proj1.jar | grep "pt/nomad/Kafka/Main"

pt/nomad/Kafka/Main$1.class
pt/nomad/Kafka/Main.class

我可以看到该类位于jar内部,其路径与我提供给清单的路径完全相同。

此设置有什么问题?

谢谢。

更新

我已经添加了一个ClassPath来显示,但它仍然没有工作:

的build.xml:

  <?xml version="1.0" encoding="UTF-8"?>
    <project name="ROCM4.0" default="default" basedir=".">
    <description>Builds, tests, and runs the project ROCM4.0.</description>

     <property name="build.dir"   value="./build"/>
     <property name="dist.dir"    value="."/>

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

     <path id="class.path">
      <fileset dir="./lib">
       <include name="**/*.jar" />
      </fileset>
     </path>

     <target name="compile">
      <mkdir dir="./build/classes"/>
      <javac srcdir="./src" destdir="./build/classes">
        <classpath refid="class.path" />
      </javac>
    </target>

    <manifestclasspath property="jar.classpath" jarfile="ROCM4.0.jar">
      <classpath>
        <fileset dir="${dist.dir}/lib" includes="*.jar"/>
      </classpath>
    </manifestclasspath>

<target name="jar">
   <jar destfile="ROCM4.0.jar" basedir="./build/classes" zip64Mode="always">
    <zipgroupfileset dir="lib" includes="*.jar"/>
    <manifest>
      <attribute name="Main-Class" value="pt.nomad.Kafka.Main"/>
      <attribute name="Class-Path" value="${jar.classpath}"/>
   </manifest>
  </jar>
</target>
</project>

1 个答案:

答案 0 :(得分:0)

您的Main类所依赖的类中至少有一个类不在类路径上。您需要向清单添加Class-Path条目,或者在java命令行上使用-cp指定运行时类路径。