Maven 2로 실행 가능한 jar 빌드
나는 Maven 만트라에 비교적 익숙하지 않지만 Maven을 사용하여 명령 줄 실행 가능 jar를 빌드하려고합니다. 종속성을 설정했지만 mvn install
항아리를 실행하고 실행하려고하면 두 가지 일이 발생합니다. 첫째, 수정 가능한 메인 클래스가 없습니다. 이 문제를 수정하면 실행시 클래스를 찾을 수 없다는 오류가 발생합니다.
Maven은 jar 내부에 종속성 라이브러리를 패키징하지 않으므로 jar를 독립 실행 형 응용 프로그램으로 실행할 수 없습니다. 이 문제를 어떻게 수정합니까?
이를 수행하는 가장 쉬운 방법은 maven-assembly-plugin
및 미리 정의 된 jar-with-dependencies
설명자를 사용하여 어셈블리를 만드는 것 입니다. 또한이 uber jar에 대한 메인 클래스 항목이 포함 된 매니페스트를 생성해야합니다. 아래 스 니펫은이를 수행하도록 어셈블리 플러그인을 구성하는 방법을 보여줍니다.
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>fully.qualified.MainClass</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
그런 다음 어셈블리를 생성하려면 다음을 실행하십시오.
mvn assembly:assembly
빌드의 일부로 어셈블리를 생성하려면 assembly:single
mojo를 패키지 단계에 바인딩하면 됩니다.
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>fully.qualified.MainClass</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
그리고 간단히 실행하십시오.
mvn package
Maven은 일반적으로 Java 프로그램에서 수행하지 않기 때문에 jar 파일 내에 종속성을 패키징하지 않습니다.
대신 당신은 당신의 jar 파일과 함께 종속성을 제공하고 그들을 언급 매니페스트의 헤더 .Class-Path
이 경로로 이동하려면 .NET Framework에 대한 addClasspath
속성 ( 여기에 문서화 됨 ) 을 활성화해야 합니다 maven-jar-plugin
.
jar 파일에 모든 종속성을 정말로 포함하고 싶다면 Maven Assembly 플러그인을 사용하여 jar-with-dependencies
.
이것이 제가 소규모 프로젝트를 위해 할 일입니다. 대부분의 경우 큰 병 하나를 원하지 않습니다.
빌드하려면 : mvn clean dependency : copy-dependencies 패키지
실행하려면 ( 대상 디렉토리에서 ) : java -cp myjar.jar : ./ dependency / * com.something.MyClass
나는 Joachim Sauer와 동의합니다.
jar-with-dependency를 사용하는 대신 pom.xml에서 다음과 같이 jar 플러그인을 구성해야합니다.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<index>true</index>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>[mainClassFullName]</mainClass>
</manifest>
<manifestEntries>
<mode>development</mode>
<url>${project.url}</url>
<key>value</key>
</manifestEntries>
</archive>
</configuration>
</plugin>
그리고이 어셈블리 구성을 사용하여 jar 종속성을 어셈블리에 추가합니다.
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
<id>zip-with-jars</id>
<formats>
<format>zip</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
<dependencySets>
<dependencySet>
<outputDirectory>/</outputDirectory>
<useProjectArtifact>true</useProjectArtifact>
<unpack>false</unpack>
<scope>runtime</scope>
</dependencySet>
</dependencySets>
</dependencySets>
</assembly>
pom.xml에 아래 코드를 추가하고 다음으로 실행 : maven : install. jar는 "java -jar Hello.jar"로 사용할 수있는 eclipse의 대상 폴더에 생성됩니다. 그러나 주 클래스의 이름이 com.abc.HelloWorld.java로 지정되었는지 확인하십시오.
<build>
<plugins>
<plugin>
<groupid>org.apache.maven.plugins</groupid>
<artifactid>maven-shade-plugin</artifactid>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<finalname>HelloW</finalname>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<manifestentries>
<main-class>com.abc.HelloWorld.java</main-class>
<build-number>1</build-number>
</manifestentries>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
참고 URL : https://stackoverflow.com/questions/2022032/building-a-runnable-jar-with-maven-2
'program story' 카테고리의 다른 글
문자열의 문자가 문자인지 확인하는 방법은 무엇입니까? (0) | 2020.10.05 |
---|---|
Xcode 5 및 iOS 7 : 아키텍처 및 유효한 아키텍처 (0) | 2020.10.05 |
Swift에서 일반 프로토콜을 만드는 방법은 무엇입니까? (0) | 2020.10.05 |
jQuery를 사용하여 너비를 백분율로 설정 (0) | 2020.10.05 |
GNU의 재귀 와일드 카드는? (0) | 2020.10.05 |