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

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

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

Ответ 1

Здесь, как построить банку с IntelliJ 10 http://blogs.jetbrains.com/idea/2010/08/quickly-create-jar-artifact/

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

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

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

OK

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

Ответ 2

Это еще проблема в 2017 году, я надеюсь, что это поможет кому-то! Я нашел 2 возможности создания рабочих ящиков в 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

  • Чтобы построить свой артефакт, перейдите к сборке артефактов и выберите "rebuild". Он создаст папку "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

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

enter image description here

Final setup

  • Сохраните его, затем выполните

enter image description here

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

JAR file location

Ответ 3

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

Как создать .jar с помощью IntelliJ IDEA 14.1.5:

  • Файл > Сохранить все.
  • Запустите драйвер или класс с основным методом.
  • Файл > Структура проекта.
  • Выберите вкладку "Артефакты".
  • Нажмите зеленую кнопку плюс рядом с окном.
  • Выберите JAR из раскрывающегося меню "Добавить". Выберите "Из модулей с зависимостями"
  • Выберите основной класс.
  • Радиокнопка должна выбрать "extract to target JAR". Нажмите OK.
  • Установите флажок "Настроить на make"
  • Нажмите "Применить" и "ОК".
  • В главном меню выберите раскрывающееся меню сборки.
  • Выберите артефакты сборки параметров.

Ответ 4

Для тех, кто пользуется изображениями, как я:

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

введите описание изображения здесь

введите описание изображения здесь

введите описание изображения здесь

введите описание изображения здесь

Ответ 5

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

Ответ 6

Вот 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. проверить свою банку, используя 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

Ответ 7

Идея 8.1.3

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

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

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

Ответ 8

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

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

Ответ 9

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

Ответ 10

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

Ответ 11

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

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

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

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

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

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

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

Ответ 12

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

Ответ 13

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

mvn package -DskipTests

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

Ответ 14

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

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

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

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

Ответ 15

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

java -jar xxxxx.jar

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

и решение:

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

<project folder>\src\main\java 

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

<project folder>\src\main\resources

Ответ 16

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

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

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

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

Ответ 17

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

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

enter image description here

Ответ 18

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