Не удалось найти или загрузить основной класс с помощью Ant build xml - PullRequest
0 голосов
/ 22 мая 2018

Я почти уверен, что это глупая ошибка, которую я где-то совершаю, но я просто не вижу, что не так.

Я использую 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>

1 Ответ

0 голосов
/ 22 мая 2018

По крайней мере один из классов, от которых зависит ваш класс Main, не находится на пути к классам.Вам нужно либо добавить запись Class-Path в манифест, либо указать путь к классу времени выполнения с помощью -cp в командной строке java.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...