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

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

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

24 ответа

Решение

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

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

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

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

Хорошо

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

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

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

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

Меню Файл

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

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

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

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

<project folder>\src\main\java 

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

<project folder>\src\main\resources

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

правильный путь для нового манифеста

  • Затем вы выбираете зависимости, которые вы хотите упаковать в свой jar-файл, или NEAR ваш файл jar

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

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>
  • Создайте новую конфигурацию запуска / отладки:

Создайте новую конфигурацию запуска / отладки

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

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

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

Окончательная настройка

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

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

Расположение файла JAR

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

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

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

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

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

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

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

  1. Файл, новый, проект, Maven
  2. создать пакет, создать Java-программу внутри этого пакета
  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>
    

скриншот: 4. Откройте окно проекта Maven, нажав на значок поиска и введите Maven,

  1. нажмите на очистить, затем нажмите на установку

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

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

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

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

Очень важно!

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

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

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

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

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

java -jar xxxxx.jar

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

и решение:

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

<project folder>\src\main\java 

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

<project folder>\src\main\resources

Возможно, уже немного поздно, но мне удалось решить это следующим образом -> открыть с помощью winrar и удалить ECLIPSEF.RSA и ECLIPSEF.SF в папке META-INF, кроме того поставить "Main-class: main_class_name" (без ".class") в МАНИФЕСТ.МФ. Убедитесь, что вы нажали "Enter" дважды после последней строки, иначе это не сработает.

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

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

https://i.st ack.imgur.com/USxbv.png

Как сказано выше, но я должен отметить один момент. Вы должны установить флажок:

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

С помощью

      mvn clean package spring-boot:repackage

введите указанную выше команду в терминале IntelliJ. Он генерирует целевой файл с исполняемым файлом Jar.

С 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>

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

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

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

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

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

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

Идея 8.1.3

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

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

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

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

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

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

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

Используйте Gradle для сборки вашего проекта, тогда jar будет в файле сборки. Вот ссылка на Stack Overflow о том, как создавать файлы .jar с помощью Gradle.

Проект Java с Gradle и создание файла jar в Intellij IDEA - как?

Если вы читаете этот ответ, потому что столкнулись с ошибкой "файл ресурсов не найден", попробуйте следующее:

  1. Файл -> Структура проекта -> Artiface -> Новый, тип - Другое.
  2. Дайте ему красивое имя, и в Output Layout, Нажмите Create Archive чтобы создать новую банку, и снова дайте ей красивое имя;)
  3. Нажмите на только что добавленную банку, добавьте в нее вывод скомпилированного модуля.
  4. Щелкните банку еще раз, на нижней панели выберите путь к проекту и добавьте Manifest File затем установите правильный Main Class а также Class Path.
  5. Нажмите Add Library Files, и выберите нужные библиотеки (вы можете использовать Ctrl+,A чтобы выбрать все).
  6. Build -> Build Artifact -> Clean & Build и посмотрите, исчезла ли ошибка.

Если вы используете сторонние библиотеки со своим проектом или у вас есть проблемы с созданием файла 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/ Я попробовал шаги, упомянутые там, и все работало нормально для меня!

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

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

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

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

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

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

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

Если вы используете новую бета-версию пользовательского интерфейса IntelliJ, приведенные выше решения потребуют модификации.

В настоящее время в новой бета-версии пользовательского интерфейса IntelliJ есть ошибка, из-за которой если вы нажмете кнопку «Создать» в меню артефактов сборки, ничего не произойдет.

Однако, если вы используете клавиши со стрелками для перехода к кнопке «Создать», а затем нажимаете «Ввод» на клавиатуре, это будет работать.

или вы можете сделать следующее:

Вам нужно нажать клавишу Shift+Shift и ввести [Build Artifacts...] > затем использовать клавиши со стрелками для навигации по плавающему меню сборки артефакта и нажать Enter.

Трекер ошибок: https://youtrack.jetbrains.com/issue/IDEA-316889/Build-artifacts-inactive-if-hamburger-menu-is-on .

Надеюсь, это избавит кого-то от часа боли, которую я испытал, пытаясь собрать свой JAR-файл.

Я пробовал большинство приведенных ответов, но в моем случае папка «out» (которая содержит файл jar) не создавалась. Итак, это сделало работу:

Build -> Build Artifacts -> (вы увидите имя класса) -> Build

Теперь папка «out» была создана, и в ней был файл jar.

Если вы пытаетесь построить банку с Kotlin, вам нужно создать src/main/java папку и используйте эту папку в качестве места для папки META-INF.

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

mvn package -DskipTests

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

Муравей и мавен широко используются. Я предпочитаю Ant, я чувствую, что он более легкий, а вы, разработчик, больше контролируете ситуацию. Некоторые предполагают, что это его недостаток:-)

Другие вопросы по тегам