2016-09-01 3 views
5

Я использую Intellij Java 2016.2.2 и Maven для создания очень простого консольного приложения Java.Intellij Java 2016 & Maven: как встраивать зависимости в JAR?

Я хочу, чтобы добавить внешнюю библиотеку, поэтому я добавляю свою зависимость в Maven, как это:

<dependency> 
    <groupId>jline</groupId> 
    <artifactId>jline</artifactId> 
    <version>2.12</version> 
</dependency> 

Он отлично работает, когда я запускаю его в IDE, но не во внешней консоли (у меня есть следующая ошибка: java.lang.NoClassDefFoundError).

Я проверил, и по какой-то причине внешний JAR не добавлен в JAR, который я только что сгенерировал. Я также пробовал много вещей в «Файл -> Структура проекта», но все еще не работает ...

Я просто хочу построить мой JAR с моими зависимостями, поэтому я могу просто запустить приложение в консоли, используя:

java -jar myproject.jar 

Как я могу это сделать? Спасибо за вашу помощь!

+2

Используйте maven-assembly-plugin, используя дескриптор jar-with-dependencies .... – khmarbaise

+0

Спасибо за вашу помощь, но все еще не работает. Поэтому мне интересно: я создаю свой JAR, используя «Build -> Build artifacts ...». Правильно ли это? – thenaoh

ответ

12

я, наконец, удалось создать этот файл JAR с IntelliJ Java, вот как я делаю:

  • добавьте зависимости в файл pom.xml
  • перейти к файлу -> Структура проекта -> Артефакты -> Создать -> JAR -> Из модуля с зависимостью Cies
  • выбрать главный класс и нажмите кнопку OK
  • в проекте, в ИПВ/основной, создать «ресурсы» папка
  • переместить «META-INF» (с MANIFEST.MF в ней) папку в этом «ресурсы» папка
  • перейдите на строительство -> создать артефакты для создания фляги

EDIT

лучше (и проще), чтобы сделать это, добавив следующие строки в П. xml file:

<build> 
    <plugins> 
     <plugin> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <configuration> 
       <archive> 
        <manifest> 
         <mainClass>your.MainClass</mainClass> 
        </manifest> 
       </archive> 
       <descriptorRefs> 
        <descriptorRef>jar-with-dependencies</descriptorRef> 
       </descriptorRefs> 
      </configuration> 
      <executions> 
       <execution> 
        <id>make-assembly</id> 
        <phase>package</phase> 
        <goals> 
         <goal>single</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

затем используйте команды «чистого» и «пакетного» maven.

Последние 3 шага выше (о MANIFEST.MF) по-прежнему кажутся обязательными.

4

Хорошо, поэтому вы в основном хотите создать «жирную банку» (иногда называемую сборкой), которая содержит все свои зависимости (обычно внешние зависимости являются внешними).

Для этого вам необходимо использовать плагин Maven. Ниже конфигурации плагина пример сборки jar-with-dependencies:

<project> 
    ... 
    <build> 
    ... 
    <plugins> 
     <plugin> 
     <artifactId>maven-assembly-plugin</artifactId> 
     <version>2.6</version> 
     <configuration> 
      <descriptorRefs> 
      <descriptorRef>jar-with-dependencies</descriptorRef> 
      </descriptorRefs> 
     </configuration> 
     ... 
</project> 

затем просто запустить

mvn package 
+0

Спасибо, это кажется интересным!Но теперь еще одна простая проблема: «Нет основного атрибута манифеста». Кажется, что мне не удается найти файл MANIFEST.MF ... Любая идея? – thenaoh

+1

http://stackoverflow.com/questions/574594/how-can-i-create-an-executable-jar-with-dependencies-using-maven – YMomb

+0

Спасибо! Я посмотрю на это! – thenaoh

Смежные вопросы