IntelliJ에서 항아리를 올바르게 만드는 방법?


519

단일 모듈과 일부 종속성이 포함 된 프로젝트가 있습니다. 컴파일 된 모듈이 들어있는 별도의 디렉토리에 항아리를 만들고 싶습니다. 또한 모듈 옆에 종속성을 표시하고 싶습니다.

IntelliJ의 "build jar"프로세스를 어떻게 비틀어도 모듈의 출력은 비어 있습니다 (META-INF 파일 외에).

답변:


602

다음은 인 IntelliJ (10)와 함께 항아리를 구축하는 방법 http://blogs.jetbrains.com/idea/2010/08/quickly-create-jar-artifact/

File-> Project Structure-> Project Settings-> Artifacts-> 클릭 green plus sign-> Jar->From modules with dependencies...

위의 "skeleton"은 jar가 저장 될 위치로 설정됩니다. 실제로 빌드하고 저장하려면 다음을 수행하십시오.

대상 항아리로 추출

확인

빌드 | 유물 제작 | 짓다

에서 .jar 파일을 추출하십시오.

ProjectName | 아웃 | 유물 | ProjectName_jar | ProjectName.jar


9
포함 된 jar의 일부 클래스가 RSA로 서명되면 실패합니다.
Asif Shahzad

1
@AsifShahzad는 서명 된 종속성이있는 jar 파일을 빌드하는 데 대한이 답변을 참조하십시오 : stackoverflow.com/questions/41746177/… .

5
이 방법은 여전히 ​​실패하고 jar 파일이 실행되지 않습니다
samuel owino

6
누군가가 실제로 작동하지 않도록 열심히 노력한 것 같습니다. 그것은 결코 작동하지 않는 수치입니다. 나는 적어도 50 가지의 다른 답변을 시도했지만 그중 아무것도 효과가 없었습니다. 그리고 매번 같은 이야기. 이제 우리 회사의 모든 사람들이 출력 병을 생산하는 데 필요한 진정한 노력을 생각할 때 단지 일주일을 항아리로 출력합니다.
최고

2
많은 사람들이 저에게 썼 듯이 이것은 언젠가 작동하는 단순화입니다. 아래 @zsolt tolvali의 답변을 참조하십시오. 새 프로젝트를 만들 때 JAR 생성 프로세스를 기본 활동으로 만드는 것은 IntelliJ의 관점에서 좋을 것입니다.
Etamar Laron

256

이것은 2017 년 여전히 문제이며, 누군가에게 도움이되기를 바랍니다. IntelliJ 2017에서 작동하는 jar를 만들 수있는 두 가지 가능성을 발견했습니다 .2

1. IntelliJ에서 아티팩트 생성 :

  • 프로젝트 구조로 이동 :

파일 메뉴

  • 새 이슈를 만듭니다.

새로운 이슈 만들기

  • 기본 클래스를 선택하고 매니페스트 폴더를 변경하십시오.

여기에 이미지 설명을 입력하십시오

매니페스트 디렉토리를 변경해야합니다.

<project folder>\src\main\java 

"java"를 "resources"로 교체

<project folder>\src\main\resources

이것이 다음과 같이 보일 것입니다 :

새로운 매니페스트를위한 올바른 방법

  • 그런 다음 항아리에 포장하려는 종속성을 선택하거나 항아리 파일 근처에

  • 아티팩트를 빌드하려면 아티팩트를 빌드하고 "다시 빌드"를 선택하십시오. jar 파일과 그 종속 항목이있는 "out"폴더를 만듭니다.

여기에 이미지 설명을 입력하십시오

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>
  • 새로운 실행 / 디버그 구성을 작성하십시오.

새로운 실행 / 디버그 구성을 작성하십시오.

  • 응용 프로그램을 선택하십시오 :

응용 프로그램을 선택

  • 양식을 작성
  • 빌드 후 마지막으로 실행될 "어셈블리 : 단일"메이븐 목표 추가

여기에 이미지 설명을 입력하십시오

최종 설정

  • 저장 후 실행

여기에 이미지 설명을 입력하십시오

이 절차는 "target"폴더 아래에 jar 파일을 생성합니다

JAR 파일 위치


6
매니페스트 디렉토리를 src / resources로 변경하는 것이 핵심입니다! 감사합니다 ~
fantouch

3
@Zsolt Tolvaly
fruqi

2
no main manifest attribute위의 솔루션 을 채택하고 있었습니다 . 아무도을 변경하는 것에 대해 언급하지 않았습니다 path to manifest. Thnx !!
Prometheus

1
이것이 최고의 답변이되어야합니다. 감사!
Giorgos Lamprakis

스칼라의 소스 코드는 어떻습니까? 자바는 내가 사용하는 것이 아니다
Kiwy

135

최근 에이 문제가 있었으며 이전 솔루션이나 링크에 세부 정보가 없으면이 단계를 쉽게 수행 할 수 있다고 생각합니다.

.jarIntelliJ IDEA 14.1.5를 사용하여 작성하는 방법 :

  1. 파일> 모두 저장.
  2. 메인 메소드로 드라이버 또는 클래스를 실행하십시오.
  3. 파일> 프로젝트 구조.
  4. "아티팩트"탭을 선택하십시오.
  5. 창 상단 근처에있는 녹색 더하기 버튼을 클릭하십시오.
  6. 추가 드롭 다운 메뉴에서 JAR을 선택하십시오. "종속성이있는 모듈에서"를 선택하십시오.
  7. 메인 클래스를 선택하십시오.
  8. 라디오 버튼은 "대상 JAR로 추출"을 선택해야합니다. OK를 누릅니다.
  9. "제조업체"확인란을 선택하십시오.
  10. 적용 및 확인을 누릅니다.
  11. 기본 메뉴에서 빌드 드롭 다운을 선택하십시오.
  12. 옵션 빌드 아티팩트를 선택하십시오.

1
당신이 뭔가를 그리워 했습니까? 모듈에 대한 옵션이 있습니다. 제 경우에는 보안으로 인해 오류를 통해 JAR이지만 JVM을 생성하고 있습니다.
sonus21

나는 그 목록이 전부라고 생각한다. 보안으로 인해 Java 설정에 문제가있을 수 있습니다. 다른 사람이 이것에 대해 생각이 있습니까?
user5442490

동일하게 오류가 발생했습니다.이 jar 파일을 실행할 때 기본 클래스 JavaFundamentals.jar을 찾거나로드 할 수 없습니다. 여기에서 설명합니다 : stackoverflow.com/questions/40636790/…
laggerok19

항아리를 만들 때 마다이 12 단계 프로세스를 수행해야합니까, 아니면 IntelliJ가 이러한 작업을 기억하여 바로 가기를 사용할 수 있습니까?
Andy

31

내가하는 것처럼 이미지의 이점을 얻는 사람들을 위해 :

File -> Project Structure

여기에 이미지 설명을 입력하십시오

여기에 이미지 설명을 입력하십시오

여기에 이미지 설명을 입력하십시오

여기에 이미지 설명을 입력하십시오


4
@samuelowino 나는 당신이 그런 말을하지 주셔서 감사합니다. "아직 작동하지 않는"것을 설명하십시오.
Crt

1
이봐 @Crt 내가 올바른 jar 파일을 확인하지 않은, 분명히, Inteliji은 다른 디렉토리, 사과, 내 나쁜 솔루션 작품, 덕분에 두 jar 파일 생성
owino 사무엘을

15

다음은 maven 프로젝트의 단계별 예입니다.

방법 1 : maven 및 pom.xml을 사용하여 jar 빌드

  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. java -jar를 사용하여 항아리를 테스트하십시오.

여기에 이미지 설명을 입력하십시오

방법 2 : pom.xml 변경없이 maven으로 jar 빌드

  1. 파일, 새로운 프로젝트, maven
  2. 패키지를 만들고 해당 패키지 내에 Java 프로그램을 만듭니다 (위와 동일)
  3. File-> Project Structure-> Project Settings-> Artifacts-> 클릭 green plus sign-> Jar->From modules with dependencies

매우 중요!

MANIFEST.MF는 resources 폴더에 있어야하고 Main.Class는 {package}-{class-name-that-contains-main-class}를 참조해야합니다.

여기에 이미지 설명을 입력하십시오 여기에 이미지 설명을 입력하십시오

  1. 그런 다음 메뉴에서 빌드, 아티팩트 빌드, 빌드를 클릭하십시오.

여기에 이미지 설명을 입력하십시오

  1. out 폴더에서 항아리를 찾으십시오.

여기에 이미지 설명을 입력하십시오

  1. 그것을 실행 :)

여기에 이미지 설명을 입력하십시오


이 작동합니다. MANIFEST.MF가 해당 디렉토리에 있어야하는 이유를 설명 할 수 있습니까?
Ubeogesh

이것은 나를 위해 도움이됩니다
Devendra Singraul

5

아마 조금 늦었지만 winrar로 열고 META-INF 폴더에서 ECLIPSEF.RSA 및 ECLIPSEF.SF를 삭제하고 "Main-class : main_class_name"( ".class"없이) )에서 MANIFEST.MF. 마지막 줄 다음에 "Enter"를 두 번 눌렀는지 확인하십시오. 그렇지 않으면 작동하지 않습니다.


서명 된 종속성에 대해서는 다음 답변을 확인하십시오. stackoverflow.com/questions/41746177/…

정말 미친 문제입니다. 왜 이런 일이 발생하거나 어떻게 해결해야하는지 아십니까? 해키 느낌
앤드류 No

5

이 솔루션을 사용 하면 이 오류가 발생합니다.

java -jar xxxxx.jar

xxxxx.jar에 기본 매니페스트 속성이 없습니다.

해결책은 다음 같습니다.

매니페스트 디렉토리를 변경해야합니다.

<project folder>\src\main\java 

Java를 자원으로 변경

<project folder>\src\main\resources

휴, 마침내 팁 주셔서 감사합니다!
rendon

@rendon 행운을 빌어 요!
Saeed

완벽합니다!. 이것은 잘 작동합니다
jafarmlp

2

다중 모듈 Kotlin 앱 에서 항아리를 만들려고했는데 악명 높은 '주요 매니페스트 속성 없음'오류가 발생했습니다. 에 매니페스트 디렉토리를 생성 src/main/resources해도 작동하지 않았습니다.

대신 src직접 만들 때 작동합니다 src/META-INF/MANIFEST.MF.

여기에 이미지 설명을 입력하십시오


안녕하세요, 잘 작동합니다. 그러나 이제는 "java.desktop / javax.swing.ImageIcon java.lang.NullPointerException"리소스를 찾을 수 없다는 새로운 오류가 있습니다.
Shivam Mathur

2

여기에 이미지 설명을 입력하십시오

위의 사람들이 말했듯이 한 가지 주목해야합니다. 확인란을 확인해야합니다.

프로젝트 빌드에 포함


1

아이디어 8.1.3

'output'디렉토리 (project / out / production //)에 컴파일 된 출력이 있으므로 Jar는 정상입니다.

항아리를 만들기 전에 'make'를 실행해야합니다.

의존성에 대해서는 "show library"를 체크하고 원하는 것을 선택하십시오.


1

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>

0

Maven ( http://maven.apache.org )을 살펴볼 수도 있습니다 . 응용 프로그램의 기본 빌드 프로세스로 사용하거나 구성 편집 대화 상자를 통해 특정 작업을 수행 할 수 있습니다. Maven 내에서 모듈의 JAR을 작성하는 프로세스는 사소한 자체 실행 가능 JAR에 모든 종속성을 포함시키려는 경우 상당히 간단합니다.

Maven을 사용한 적이 없다면 Maven으로 Better Builds 를 읽으십시오 .


8
Maven은 jar 작성과 같은 간단한 작업에 대한 오버 헤드입니다. 아마도 개미이지만 확실하지는 않습니다.
Juriy

링크는 OCT (2014 년) 죽은
KathyA.

1
@KathyA. 감사합니다-Maven 팀의 권장 사항을 사용하도록 업데이트되었습니다.
Gary Rowe

5
너무 사소한 경우 답에 포함시키지 않겠습니까?
nuzzolilo

1
독자가 사이트를 방문하여 학습 과정을 시작하기를 바랍니다.
Gary Rowe

0

프로젝트와 함께 타사 라이브러리를 사용하거나 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에는 "Other"대신 이슈 형식으로 "JAR"을 선택하면 기본 매니페스트가 JAR의 프로젝트 매니페스트를 덮어 쓰는 버그가있는 것으로 보입니다.
빨간

0

maven 프로젝트에서 IntelliJ IDEA 프로젝트를 다시 가져 오면 모든 변경 사항이 손실되므로 다른 답변 중 일부는 쓸모가 없습니다.

항아리의 건물은 실행 / 디버그 구성에 의해,하지 프로젝트 설정에 의해 트리거 될 필요가있다.

Jetbrains는 여기에 어떻게 이것을 할 수 있는지에 대한 좋은 설명이 있습니다.

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

"Maven 목표에 대한 트리거 구성"섹션으로 스크롤하십시오.

(설명의 유일한 단점은 스크린 샷이 최고 darcula 테마 대신 기본 흑백 색상 구성표라는 것입니다. Ugh!)

따라서 기본적으로 수행하는 작업은 "Maven Projects"패널을 열고 관심있는 프로젝트 (귀하의 경우 jar를 빌드하는 프로젝트)를 찾고 그 아래에서 실행하려는 maven 목표를 찾는 것입니다. , (일반적으로 "패키지"목표는 항아리를 생성합니다.) 컨텍스트 메뉴를 열고 (Windows 시스템을 마우스 오른쪽 단추로 클릭) "실행 / 디버그 전에 실행 ..."옵션이 있습니다. 거기에서 손으로 당신을 데려 갈 것입니다. 정말 쉽습니다.


0

kotlin을 사용하여 jar src/main/java파일 을 작성하려는 경우 폴더 를 작성 하고이 폴더를 META-INF 폴더의 위치로 사용해야합니다.


0

다음은 IntelliJ IDEA 2018.3 도움말 의 공식 답변입니다 . 나는 노력했고 효과가 있었다.

모듈에서 JAR 파일을 빌드하려면

  1. 메인 메뉴에서 Build | 유물 제작.

  2. 드롭 다운 목록에서 JAR 유형의 원하는 아티팩트를 선택하십시오. 이 목록에는 현재 프로젝트에 구성된 모든 아티팩트가 표시됩니다. 구성된 모든 아티팩트를 빌드하려면 모든 아티팩트 빌드 옵션을 선택하십시오.


0

내 문제는 이것이었다 : 나는 Intellij IDEA (다른 버전을 시도했다) + Gradle을 사용했다. 위의 응답에 표시된대로 프로젝트를 컴파일하고 artifacf jar를 빌드 할 때 "주요 매니페스트 속성 없음"이라는 오류가 발생했습니다.

이 솔루션은 저에게 효과적이었습니다 (팁을 위해 Thilina Ashen Gamage (위 참조) 덕분에).

발췌-외부 라이브러리를 사용하고 프로젝트 설정-아티팩트-추가 (+)-Jar-종속성이있는 모듈 에서 프로젝트를 빌드하는 경우 프로그램 버그로 인해 MANIFEST_MF 파일이있는 META-INF 폴더가 jar에 포함되지 않습니다. 이를 피하기 위해 EMPTY jar 파일을 작성 하십시오.

프로젝트 설정-아티팩트-추가 (+)-Jar-EMPTY JAR . META-INF 폴더가 resources 폴더에 추가됩니다 . 그런 다음 메인 클래스를 선택하십시오. 다음과 같은 jar 구조가 표시됩니다. META-INF 폴더의 존재에주의하십시오 META-INF 폴더 가 있는지 확인하십시오. 그런 다음 프로젝트를 빌드하고 아티팩트를 빌드 할 수 있습니다. 이 솔루션은 javaFX 응용 프로그램에서도 작동했습니다.


-1

spring / mvn 프로젝트에서 작업하는 경우 다음 명령을 사용할 수 있습니다.

mvn package -DskipTests

jar 파일은 대상 directoy에 저장됩니다.


-3

개미와 메이븐이 널리 사용됩니다. 저는 Ant를 선호합니다. 더 가벼워서 개발자가 더 잘 통제하고 있다고 생각합니다. 일부는 그것이 단점이라고 제안합니다 :-)


3
이것은 오류가 발생하는 이유를 설명하지 않습니다.
baordog 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.