Проблема с запуском файла JAR

Я скомпилировал проект Java в файл Jar, и у меня возникли проблемы с его запуском.

Когда я бегу:

java -jar myJar.jar

Я получаю следующую ошибку

Could not find the main class: myClass

Файл класса не находится в корневом каталоге jar, поэтому я попытался изменить путь к основному классу, чтобы он соответствовал пути к файлу класса, и получил ту же проблему.

Должен ли я сглаживать файловую структуру? если да, то как мне это сделать. Я использую Ant для создания файла Jar, если это нужно.

ОБНОВЛЕНИЕ

Вот содержимое банки и соответствующих разделов Ant, я изменил название фирмы, в которой работаю, на «org»:

META-INF/
META-INF/MANIFEST.MF
dataAccessLayer/
dataAccessLayer/databaseTest.class
org/
org/eventService/
org/eventService/DatabaseObject.class
org/eventService/DatabaseObjectFactory.class
org/eventService/DbEventClientImpl$HearBeatMonitor.class
org/eventService/DbEventClientImpl.class
org/eventService/EmptyQueryListException.class
org/eventService/EventHandlerWorkItem.class
org/eventService/EventProcessor.class
org/eventService/EventTypeEnum.class
org/eventService/EventWorkQueue$MonitorThread.class
org/eventService/EventWorkQueue$PoolWorker.class
org/eventService/EventWorkQueue.class
org/eventService/FailedToLoadDriverException.class
org/eventService/IConnectionFailureListener.class
org/eventService/InvalidEventTypeException.class
org/eventService/JdbcInterfaceConnection.class
org/eventService/NullArgumentException.class
org/eventService/OracleDatabaseObject.class
org/eventService/ProactiveClientEventLogger.class
org/eventService/ProactiveClientEventLoggerException.class
org/eventService/PropertyMap.class
org/eventService/SQLServerDatabaseObject.class
org/eventService/TestHarness.class
org/eventService/Utilities.class

И цель муравья:

<target name="compile" depends="init" description="compile the source ">
    <javac srcdir="src" destdir="bin" classpathref="project.class.path"/>
</target>
<target name="buildjar" description="build jar file" depends="compile">
    <mkdir dir="dist"/>
    <jar destfile="dist/myJar.jar" basedir="bin" includes="**/*.class" >
        <manifest>
            <attribute name="Main-Class" value="org.eventService.ProactiveClientEventLogger"/>
        </manifest>
     </jar>
</target>

person Omar Kooheji    schedule 21.11.2008    source источник
comment
Покажите нам содержимое манифеста. Если он не слишком большой, покажите нам листинг jar-файла.   -  person Dave Costa    schedule 21.11.2008
comment
Покажите нам содержимое манифеста, а не только задачу ant, создающую его.   -  person James Van Huis    schedule 21.11.2008
comment
Что находится в вашем файле MANIFEST.MF? Есть ли в org.eventService.ProactiveClientEventLogger метод main()?   -  person mipadi    schedule 21.11.2008


Ответы (2)


В файле манифеста убедитесь, что для атрибута Main-Class установлено имя класса, содержащего ваш метод main(). Например, если имя класса с указанием пакета — my.cool.Class, то в манифесте JAR Main-Class должно быть установлено на my.cool.Class.

Также убедитесь, что у вас есть объявление пакета в ваших файлах .java (например, в Class.java убедитесь, что у вас есть правильное объявление package my.cool;). Кроме того, убедитесь, что ваша иерархия каталогов настроена правильно (my.cool.Class должно быть в $SRC/my/cool/Class.java).

person mipadi    schedule 21.11.2008
comment
Я сделал все это... и это все еще не работает... Хотя я использовал косую черту, а не точки, чтобы разграничить их. с точками тоже не работает... - person Omar Kooheji; 21.11.2008
comment
Файлы манифеста очень требовательны к регистру букв, пробелам и так далее. Убедитесь, что ваши строки также правильно завершены, если строка Main-Class является последней. - person jcoder; 21.11.2008

Вы должны указать свой основной класс во время создания jar с полным путем, например:

<target name="jar" depends="compile">
     <delete file="myJar.jar"/>
     <delete file="MANIFEST.MF"/>
     <manifest file="MANIFEST.MF">
        <attribute name="Main-Class" value="my.package.myClass"/>
    </manifest>

    <jar destfile="myJar.jar"
           basedir="."
           includes="**/*.class"
           manifest="MANIFEST.MF" />
</target>
person asalamon74    schedule 21.11.2008