Я почти уверен, что это глупая ошибка, которую я где-то совершаю, но я просто не вижу, что не так.
Я использую Ant для создания фляги из основного проекта и некоторого внешнегобиблиотеки.
Это моя структура каталогов:
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 с:
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
, я вижу, что класс находится внутри фляги с точно таким же путем, который я предоставляю манифесту.
Что не так с этой настройкой?
Спасибо.
ОБНОВЛЕНИЕ:
Я добавил 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>