Jar не запускается, несмотря на указание правильного основного класса, пути к классам и т. Д. - PullRequest
0 голосов
/ 02 июля 2018

Моя сборка отлично компилируется и работает с использованием файла build.xml ниже.

Единственная проблема - я создаю банку, но она не запускается без ошибки Could not find or load main class.

Я прочитал несколько ответов о переполнении стека на общую ошибку Could not find or load main class. Однако я не могу определить, что я делаю неправильно, в моем build.xml ниже.

build.xml

<?xml version="1.0" encoding="UTF-8"?>

<project default="run" name="My Project ">

<target name="run" depends="createjar">
    <java classname="com.company.program.project.MyMainClass">
        <classpath path="staging">
            <fileset dir="C:\COMPANY\Eclipse\3.6-64\plugins">
              <include name="org.eclipse.swt.*.jar" />
            </fileset>
        </classpath>
    </java>
</target>

<target name="createjar" depends="compile">
  <jar destfile="./builds/jars/swtgui.jar" basedir="./staging/com/company/program/project" filesetmanifest="mergewithoutmain">
    <manifest>
      <attribute name="Main-Class" value="com.company.program.project.MyMainClass" />
    </manifest>

    <!-- 
        <fileset dir="./bin/com/company/program/project" includes="./*.class" />
    -->
    <fileset dir="C:\COMPANY\Eclipse\3.6-64\plugins\" includes="org.eclipse.swt.win32.win32.x86_64_3.6.0.v3650b.jar" />
  </jar>
</target>

<target name="compile">
    <javac includeantruntime="false" srcdir="./src" destdir="staging">
        <classpath>
             <fileset dir="C:\COMPANY\Eclipse\3.6-64\plugins">
              <include name="org.eclipse.swt.*.jar" />
            </fileset>
        </classpath>
    </javac>

</target>

<record name="./MyMainClass.log" loglevel="verbose" action="start"/>

MyProject.log

createjar:
  [jar] found a total of 0 manifests in 2 resource collections
  [jar] A$1.class added as A$1.class is outdated.
  [jar] A$10.class added as A$10.class is outdated.
  [jar] A$11.class added as A$11.class is outdated.
  [jar] ...
  [jar] No sources found.
        [jar] Building jar: C:\my_workspace\my_project\builds\jars\swtgui.jar
  [jar] adding directory META-INF/
  [jar] adding entry META-INF/MANIFEST.MF
  [jar] adding entry A$1.class
  [jar] adding entry A$10.class
  [jar] adding entry A$11.class
  [jar] adding entry org.eclipse.swt.win32.win32.x86_64_3.6.0.v3650b.jar
  [jar] No Implementation-Title set.No Implementation-Version set.No Implementation-Vendor set.
Location: C:\my_workspace\my_project\build.xml:16: 
createjar:  duration 0 seconds

Основной класс указан правильно. Путь к классу (basedir) указан правильно. Он ожидает, пока компиляция завершится для выполнения. И т.д.

Я оставил свой лог-файл ниже, но, похоже, ant не дает никаких сведений о том, почему он не может найти мой основной класс. Кто-нибудь сразу замечает что-то не так с этими двумя файлами?

Ответы [ 2 ]

0 голосов
/ 02 июля 2018

Свойство basedir задачи jar должно соответствовать свойству destdir задачи javac.

Задание javac записывается как

<javac includeantruntime="false" srcdir="./src" destdir="staging">

Следовательно, задача jar должна быть записана как

<jar destfile="./builds/jars/swtgui.jar" basedir="staging" filesetmanifest="mergewithoutmain">

Поскольку ваш пакет определен как com.company.program.project, компилятор Java, а также JVM ожидают ваши классы в папке com/company/program/project, но ваша текущая задача jar помещает их в корневую папку файла jar.

0 голосов
/ 02 июля 2018

Вы пробовали использовать eclipse -> export -> Runnable jar file?

Я также столкнулся с этой проблемой, когда пытался вручную создать банку из своего тестового приложения. Но когда я попробовал этот вариант, он сработал.

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