Создание jar-файла с помощью maven-scala-plugin

Я создал приложение scala и теперь хочу создать jar. Я запускаю mvn package, чем пытаюсь запустить jar по команде

java -jar target/burner-1.0-SNAPSHOT.jar

и я вижу ошибку:

Failed to load Main-Class manifest attribute from

Как я могу определить свойство Main-Class? Нужно ли мне создавать Manifest.mf? куда? Или мне нужно иметь свойство mainclass где-нибудь в pom.xml?

Обновление: я создал файл src / main / resources / MANIFEST.MF с содержимым

Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven
Built-By: itsabear
Main-Class: ru.dmteam.App
Build-Jdk: 1.6.0_20

Я не забыл, что строка заканчивается в конце файла. после mvn package вижу новую банку. Я проверил manifest.mf в этой банке - он содержит правильный основной класс, но когда я набираю java -jar target/burner-1.0-SNAPSHOT.jar, я все еще вижу ошибку Failed to load Main-Class manifest attribute from

Мой pom.xml http://pastie.org/1070483

ОБНОВЛЕНИЕ 2. Я обнаружил, что теперь в банке есть два файла manifest.mf. MANIFEST.MF и META-INF / MANIFEST.MF Я переместил свой пользовательский файл MANIFEST.MF в только что созданную папку META-INF (в src / main / resources), но теперь mvn package отменяет его при создании jar ...


person Andrey Kuznetsov    schedule 02.08.2010    source источник
comment
Вы можете опубликовать копию своего pom.xml? Вы должны иметь возможность сделать это в Maven, не прибегая к ручному созданию файла манифеста.   -  person Jon McAuliffe    schedule 02.08.2010
comment
Я обновил пост.   -  person Andrey Kuznetsov    schedule 02.08.2010
comment
Я обнаружил несколько новых фактов и обновил пост.   -  person Andrey Kuznetsov    schedule 02.08.2010
comment
Добавляются ли файлы scala в ваш jar? Это объясняет, почему команда java -jar не работает, а scala -cp работает. Вы можете упаковать зависимости scala с помощью maven-assembly-plugin (я думаю, вы также можете указать здесь основной класс по умолчанию).   -  person Jon McAuliffe    schedule 02.08.2010
comment
хм ... В моей фляге нет scala-файлов. Попробую воссоздать pom.xml (сейчас ужасно) согласно руководству maven-scala-plugin. Если это не поможет, попробую сборку maven.   -  person Andrey Kuznetsov    schedule 02.08.2010
comment
Теперь я создал новый pom.xml - pastie.org/1070524 и собрал jar с mvn assembly: assembly. Я могу запустить jar с помощью команды java -jar target/final_name-jar-with-dependencies.jar. Можно ли заставить mvn автоматически генерировать MANIFEST.MF с опцией Main-Class?   -  person Andrey Kuznetsov    schedule 02.08.2010
comment
У вас должно быть все в порядке, если вы добавите ‹archive› ‹manifest› ‹mainClass› org.sample.App ‹/mainClass› ‹/manifest› ‹/archive› в узел «конфигурация» плагина maven-assembly-plugin. Вероятно, вам также придется избавиться от вашего ручного файла манифеста.   -  person Jon McAuliffe    schedule 02.08.2010


Ответы (2)


После создания нового проекта maven с использованием архетипа scala-archetype-simple (простой проект, который печатает «Hello World»), мне нужно было добавить следующее в мой pom.xml

   <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>2.2-beta-5</version>
    <configuration>
      <descriptorRefs>
        <descriptorRef>jar-with-dependencies</descriptorRef>
      </descriptorRefs>
      <archive>
        <manifest>
          <mainClass>test.App</mainClass>
        </manifest>
      </archive>
    </configuration>
    <executions>
      <execution>
        <phase>package</phase>
        <goals>
          <goal>single</goal>
        </goals>
      </execution>
    </executions>
  </plugin>

чтобы класс test.App запускался по желанию при вызове с помощью команды

java -jar ./target/mytest-1.0-SNAPSHOT-jar-with-dependencies.jar

После выполнения команды

mvn package
person Jon McAuliffe    schedule 02.08.2010
comment
Когда я набираю пакет mvn, я вижу ошибку 'single' was specified in an execution, but not found in the pluin ' - person Andrey Kuznetsov; 02.08.2010
comment
так что теперь я могу создать рабочую банку с помощью команды mvn assembly: assembly, но мне нужно запустить ее с помощью команды java -cp target/file.jar -DmainClass ru.dmteam.App. Можно ли создать банку с правильным манифестом? - person Andrey Kuznetsov; 02.08.2010
comment
Компонент ‹executions› должен связывать создание сборки с обычной фазой пакета, вы включили его в свой pom.xml? Запись ‹archive› должна быть настроена так, чтобы в вашем случае она содержала ‹mainClass› ru.dmteam.App. - person Jon McAuliffe; 03.08.2010
comment
Когда я изменил версию maven на 2.2-beta-3, все проблемы исчезли! Спасибо. - person Andrey Kuznetsov; 04.08.2010
comment
Когда я запускаю java -jar xxx.jar, путь к классам сбивается, бросая Could not resolve substitution to a value: ${spray.version}. Есть идеи, как установить правильный путь к классам? - person Yichuan Wang; 30.09.2014

вы можете запустить банку таким образом

scala -cp цель / имя проекта-1.0-SNAPSHOT.jar

person Joe Stein    schedule 02.08.2010