我很确定这是我在某个地方犯的一个愚蠢的错误,但我只是看不出有什么不对。
我正在使用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。但是,如果我尝试使用:
执行jarjava -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>
答案 0 :(得分:0)
您的Main
类所依赖的类中至少有一个类不在类路径上。您需要向清单添加Class-Path
条目,或者在java命令行上使用-cp
指定运行时类路径。