it-roy-ru.com

Как правильно построить банки из IntelliJ?

У меня есть проект, который содержит один модуль и некоторые зависимости .... Я хотел бы создать JAR в отдельном каталоге, который содержит скомпилированный модуль. Кроме того, я хотел бы, чтобы зависимости присутствовали рядом с моим модулем.

Независимо от того, как я закручиваю процесс IntelliJ «build jar», вывод моего модуля выглядит пустым (кроме файла META-INF).

393
ripper234

Вот как можно создать банку с IntelliJ 10 http://blogs.jetbrains.com/idea/2010/08/quickly-create-jar-artifact/

Файл -> Структура проекта -> Настройки проекта -> Артефакты -> Нажмите зеленый знак плюс -> Jar -> Из модулей с зависимостями ...

Вышеуказанное устанавливает «скелет», в котором будет сохранена банка. Чтобы фактически построить и сохранить его, сделайте следующее: 

Извлечь в целевую банку

Хорошо

Построить | Построить артефакт

464
simao

Это все еще проблема в 2017 году, я надеюсь, что это поможет кому-то там! Я нашел 2 возможности для создания рабочих jar-ов под IntelliJ 2017.2

1. Создание артефакта из IntelliJ:

  • Перейти к структуре проекта:

 File menu

  • Создайте новый артефакт:

 Create a new artifact

  • Выберите основной класс и обязательно измените папку манифеста:

 enter image description here

Вы должны изменить каталог манифеста:

<project folder>\src\main\Java 

заменить "Java" на "ресурсы"

<project folder>\src\main\resources

Вот как это должно выглядеть:

 correct way for new manifest

  • Затем вы выбираете зависимости, которые вы хотите упаковать в свой jar-файл, или РЯДОМ ваш jar-файл.

  • Чтобы построить свой артефакт, перейдите к созданию артефактов и выберите «перестроить». Он создаст папку «out» с вашим файлом jar и его зависимостями.

 enter image description here

2. Использование maven-Assembly-plugin

Добавить раздел сборки в файл pom

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-Assembly-plugin</artifactId>
                <configuration>
                    <finalName>ServiceCreate</finalName>
                    <appendAssemblyId>false</appendAssemblyId>
                    <archive>
                        <manifest>
                            <mainClass>com.svt.optimoo.App</mainClass>
                        </manifest>
                    </archive>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.Apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
  • Создайте новую конфигурацию запуска/отладки:

 Create a new run/debug configuration:

  • Выберите приложение:

 Choose application

  • Заполните форму
  • Добавьте цель "Assembly: single" maven после сборки, которая будет выполнена последней

 enter image description here

 Final setup

  • Сохраните его, затем запустите 

 enter image description here

Эта процедура создаст файл JAR в папке «target»

 JAR file location

135
Zsolt Tolvaly

У меня недавно была эта проблема, и я думаю, что эти шаги легко выполнить, если в каком-либо предыдущем решении или ссылке отсутствуют детали.

Как создать .jar, используя IntelliJ IDEA 14.1.5:

  1. Файл> Сохранить все.
  2. Запустите драйвер или класс с методом main.
  3. Файл> Структура проекта.
  4. Выберите вкладку «Артефакты».
  5. Нажмите зеленую кнопку плюс в верхней части окна.
  6. Выберите JAR из выпадающего меню Add. Выберите «Из модулей с зависимостями»
  7. Выберите основной класс.
  8. Переключатель должен выбрать «извлечь в целевой JAR». Нажмите ОК.
  9. Установите флажок «Построить по марке»
  10. Нажмите применить и ОК.
  11. В главном меню выберите выпадающий список.
  12. Выберите опцию сборки артефактов.
126
user5442490

Для тех, кто получает выгоду от изображений, как я:

Файл -> Структура проекта 

 enter image description here

 enter image description here

 enter image description here

 enter image description here

27
Crt

Возможно, уже немного поздно, но мне удалось решить это следующим образом -> Открыть с помощью winrar и удалить ECLIPSEF.RSA и ECLIPSEF.SF в папке META-INF, кроме того поставить «Main-class: main_class_name» (без « .class ") в MANIFEST.MF. Убедитесь, что вы дважды нажали «Enter» после последней строки, иначе это не сработает.

5
jbakirov

Вот 2 примера с проектом Maven, шаг за шагом:

Способ 1: собрать банку с maven и pom.xml

  1. Файл, новый, проект, Maven
  2. создайте пакет, создайте программу Java внутри этого пакета enter image description here
  3. в pom.xml добавьте maven-jar-plugin.

        <plugin>
            <!-- Build an executable JAR -->
            <groupId>org.Apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>3.1.0</version>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <classpathPrefix>lib/</classpathPrefix>
                        <mainClass>somePackage.sample</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
    

скриншот: enter image description here 4. откройте окно проекта maven, щелкнув значок поиска и введите maven, enter image description here

  1. нажмите на кнопку очистки, затем нажмите на кнопку установки enter image description here

  2. ваш файл JAR будет отображаться в целевой папке enter image description here

  3. протестируйте свой jar с помощью Java -jar 

enter image description here

Способ 2: построить банку с Maven без изменения pom.xml

  1. Файл, новый, проект, Maven
  2. создайте пакет, создайте программу Java внутри этого пакета (так же, как описано выше)
  3. Файл -> Структура проекта -> Настройки проекта -> Артефакты -> Нажмите зеленый знак плюс -> Jar -> Из модулей с зависимостью

Очень важно!

MANIFEST.MF должен находиться в вашей папке ресурсов, а Main.Class должен ссылаться на {package} - {class-name-that-contains-main-class}

enter image description here enter image description here

  1. затем нажмите кнопку «Создать» в меню, создать артефакты, создать

enter image description here

  1. найдите банку в папке out

enter image description here

  1. запустить его :)

enter image description here

2
rrr

Идея 8.1.3

Jar в порядке, так как есть скомпилированный вывод в каталоге 'output' (project/out/production //)

Я полагаю, вы должны запустить 'make', прежде чем строить банку

для зависимостей просто отметьте «Показать библиотеку» и выберите то, что вы хотите.

1
Vugluskr

Возможно, вы захотите взглянуть на Maven ( http://maven.Apache.org ). Вы можете использовать его как основной процесс сборки для вашего приложения, или просто для выполнения определенных задач через диалог Edit Configurations. Процесс создания JAR-модуля в Maven довольно тривиален, если вы хотите, чтобы он включал все зависимости в самозапускаемый JAR-файл, который также тривиален.

Если вы никогда раньше не использовали Maven, то вы хотите прочитать Better Builds With Maven .

1
Gary Rowe

С Maven вы можете использовать этот плагин:

 <build>
    <plugins>

        <plugin>
            <artifactId>maven-Assembly-plugin</artifactId>
            <configuration>
                <archive>
                    <manifest>
                        <mainClass>[path you class main]</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>
1
fede beron

Моя проблема была в следующем: я использовал Intellij IDEA (пробовал разные версии) + Gradle. Когда я скомпилировал проект и собрал artifacf jar, как указано в приведенных выше ответах, я получил ошибку - «нет основного манифеста attrubute ...»

Это решение сработало для меня (особая благодарность Thilina Ashen Gamage (см. Выше) за подсказку):

Выдержка - если вы используете внешние библиотеки и строите проект через Настройки проекта - Артефакты - Добавить (+) - Jar - Из модулей с зависимостями , то, вероятно, из-за ошибки программы в папке META-INF с файлом MANIFEST_MF не включая банку. Чтобы избежать этого, создайтеПУСТОЙjar файл.

Настройки проекта - Артефакты - Добавить (+) - Jar - ПУСТОЙ JAR . Папка META-INF будет добавлена ​​в папку resources . Затем выберите свой основной класс. Вы увидите следующую структуру банки:  note the presence of a folder META-INF Обратите внимание на наличие папки META-INF. Затем вы можете собрать свой проект и собрать артефакты. Это решение работало и для приложений javaFX.

0
Orkhan Hasanli

Вот официальный ответ IntelliJ IDEA Справка 2018.3 . Я пытался, и это сработало.

Построить файл JAR из модуля;

  1. В главном меню выберите Build | Построить артефакт.

  2. В раскрывающемся списке выберите нужный артефакт типа JAR . В списке отображаются все артефакты, настроенные для текущего проекта. Чтобы собрать все настроенные артефакты, выберите Build all опция артефактов.

0
Sabri Meviş

В случае, если вы пытаетесь собрать jar с помощью kotlin, вам нужно создать папку src/main/Java и использовать эту папку в качестве места для папки META-INF.

0
Chris

Когда я использую это решение эта ошибка приходит:

Java -jar xxxxx.jar

нет основного атрибута манифеста, в xxxxx.jar

и решение это:

Вы должны изменить каталог манифеста:

<project folder>\src\main\Java 

изменить Java на ресурсы

<project folder>\src\main\resources
0
Saeed

Некоторые другие ответы бесполезны, потому что как только вы повторно импортируете проект IntelliJ IDEA из проекта maven, все изменения будут потеряны.

Сборка фляги должна запускаться конфигурацией запуска/отладки, а не настройками проекта.

Jetbrains имеет хорошее описание того, как вы можете сделать это здесь:

https://www.jetbrains.com/help/idea/maven.html

Прокрутите вниз до раздела «Настройка триггеров для целей Maven».

(Единственный недостаток их описания заключается в том, что их скриншоты имеют стандартную черно-белую цветовую схему вместо супер-классной темы про Даркулу. Тьфу!)

Итак, в основном вы открываете панель «Maven Projects», вы находите интересующий вас проект (в вашем случае проект, который создает ваш jar), под ним вы находите цель maven, которую хотите выполнить. (обычно цель "package" создает jar-файлы), вы открываете в нем контекстное меню (щелкните правой кнопкой мыши на машине с Windows) и появится опция "Выполнить до запуска/отладки ...", которую вы можете выберите, и он возьмет вас за руку оттуда. Действительно легко.

0
Mike Nakis

 enter image description here 

Как говорят люди выше, но я должен отметить один момент. Вы должны проверить флажок:

Включить в сборку проекта

0
Benchur Wong

Если вы работаете над проектом spring/mvn, вы можете использовать эту команду:

mvn package -DskipTests

Файл jar будет сохранен на целевой директой.

0
Han Kai

Если вы используете сторонние библиотеки со своим проектом или у вас есть проблемы с созданием файла MANIFEST.MF должным образом, могут возникнуть конфликты при запуске файлов JAR, созданных с использованием 

File > Project Structure > Artifacts > '+' > JAR > From modules with dependencies > .....

метод, упомянутый выше.

Вместо этого я предлагаю вам создать пустой JAR и вручную добавить все остальные элементы в выходной корень. Замечательная статья в блоге для этого метода может быть найдена здесь: http://karthicraghupathi.com/2016/07/10/creating-an-executable-jar-in-intellij-idea/ Я попробовал шаги, упомянутые там и у меня все работало нормально! 

0
Thilina Ashen Gamage

Я пытался собрать флягу из мультимодульного приложения Kotlin и получал пресловутую ошибку «нет атрибута главного манифеста». Создание каталога манифеста в src/main/resources также не сработало.

Вместо этого он работает при его непосредственном создании в src:src/META-INF/MANIFEST.MF.

 enter image description here

0
Tobias Uhmann