2013-06-13 6 views
2

Со всей моей помощью я смог завершить свой первый проект в java. Теперь я хочу создать банку и запустить приложение (проект Java - это простое консольное приложение, которое в качестве зависимости имеет другой проект (консольное приложение)) от jar.Атрибут манифеста для java jar

Я создал банку с затмением правой кнопкой мыши - экспорт - создал банку. Когда я пытаюсь запустить эту баночку из моего ЦМДА, у меня есть ошибки (ниже ошибка я адресность)

no main manifest attribute, in AAA.jar 

Я Гугл ошибки - большинство из них подвергается создать файл манифеста. Я создал файл манифеста, как показано ниже в проекте, равном уровню Src

Manifest-Version: 1.0 
Main-Class: com.Pacakename.mainclass 
Class-Path: log4j-1.2.16.jar db2jcc.jar db2jcc_license_cu.jar 

Тогда J попробовал запустить баночку еще раз, но на этот раз он не говорит, не основной метод, где я есть основной метод в классе

Пожалуйста кто-то объяснит ясный шаг для создания манифеста (это действительно помогает мне, если вы покажете мне структуру папок того места, где у нас есть файл манифеста)

ответ

5

Давайте предположим, что вам есть следующие структуры каталогов:

MyJavaProject 
    |-src 
     |- com 
      |- example 
       |- Main.java 

Чтобы компилировать такой проект в CMD линии (внешних зависимостей) вы должны вызывать команды

$ cd MyJavaProject 
$ mkdir bin   //to separate *.class file from source files 
$ javac -d bin src\com\example\Main.java 

Это создаст Main.class файл bin. Для того, чтобы упаковать его в * .jar файл, вы можете: 1) создать баночку с бинарными файлами и указать главный класс в ЦМД 2) создать Manifes и embbed его банку (я остановлюсь на этом)

Вы должны создать META-INF каталог под src и внутри него создает MANIFEST.mf файл

Вашего манифест должен выглядеть следующим образом:

Manifest-Version: 1.0 
Created-By: <Your info> 
Main-Class: com.example.Main 

Не забудьте добавить пустую строку в конце на манифесте !!

В этом случае необходимо указать Manifest-Version атрибут, Created-By атрибут, и полное имя главного класса для работы в Main-Class атрибуте

Для создания Jar с этим манифестом файлом и двоичным файлом, вызывать команды

$ cd bin 
$ jar cfm MyJavaProject.jar ..\src\META-INF\MANIFEST.MF . 

это создаст новую баночку под названием MyJavaProject.jar и использовать свой манифест

Если проект зависит от внешних CLAS SAS или банку, добавьте их в пути к классам при компиляции (-cp опция) и добавить еще одну строку в Manifest

ClassPath: path/to/dependent/jars/jar.jar 

Перекомпилируйте его и создать новую баночку и наслаждаться Java квест :)

Для получения дополнительной информации о манифесте см.: docs

PS: Работа с банками, манифест из строки cmd может показаться уродливым, но он может научить вас некоторым концепциям, подобным ava. Если вы хотите пропустить его, пожалуйста, используйте Apache Maven или Apache Ant

+0

Что вы так много объясняете мне так ясно, читая ваш ответ, я понимаю несколько тем я собираюсь реализовать выше с моим cmd. – tom

+0

не проблема, я рад помочь вам :) –

+0

Это сработало - :), я смог создать флягу и запустить ее, Еще раз спасибо – tom

0

Если вы используете eclipse, вы можете использовать «Экспорт» -> Runnable jar для достижения ваших целей. В этом случае у вас должна быть допустимая конфигурация запуска для вашего проекта, поскольку eclipse использует эту конфигурацию запуска как своего рода план для исполняемой банки.

В этом случае затмение будет строить манифест для вас.

+1

Вместо использования «Export -> Runnable jar» в Eclipse, я предпочитаю использовать Maven pom.xml для определения моей исполняемой .jar-сборки. Очевидно, для этого требуется установка плагина Maven Maven для Eclipse. – djangofan

+1

@djangofan Но путь maven здесь сложнее объяснить. В своей повседневной работе я также использую maven, ant или gradle в сочетании с системами сборки для создания банок. Производственные выпуски никогда не должны строиться на рабочей станции, на мой взгляд, только на специальной сборке. – mschenk74

+0

@ mschenk74 Я пробовал точно так же, как вы sujjested bu twhen Я пытаюсь запустить этот har, Тем не менее, я получаю такое же сообщение об ошибке Нет атрибута признака – tom

1

Если вы используете Maven Я могу порекомендовать вам использовать shade plugin производить готовые к выполнению баночки со всеми зависимостями (и манифеста :-)) на борту.

Включите это в pom.xml:

<project> 
    ... 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-shade-plugin</artifactId> 
     <version>2.1</version> 
     <executions> 
      <execution> 
      <phase>package</phase> 
      <goals> 
       <goal>shade</goal> 
      </goals> 
      <configuration> 
       <transformers> 
       <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> 
        <!-- your main class: --> 
        <mainClass>org.sonatype.haven.HavenCli</mainClass> 
       </transformer> 
       </transformers> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
    ... 
</project> 

, а затем выполнить mvn clean package shade:shade построить банку, который можно запустить из командной строки с java -jar jarfilename.jar.

+0

Нет, я его не использую, Maven не одобрен на моем рабочем месте- :(, Пожалуйста sugest me, как это сделать без использования Maven – tom

+0

Вы используете простое затмение? Или версия IBM-ified (RAD)? – tbsalling

+0

его просто равное затмение – tom