[java] maven jar-de-dependencies의 이름을 바꿀 수 있습니까?
현재 jar-with-dependencies 어셈블리를 사용하여 이러한 jar을 만들고 있습니다. 그러나 내 항아리의 이름은 약간 길다.
이 jar은 AS400의 RPG 프로그램에서 사용되기 때문에 개발자가 인생을 조금 더 쉽게 만들 수 있도록 단축하고 싶습니다. 그러나 손으로 이외는 일반적인 항아리 이름을 바꾸는 방법을 찾지 못했습니다 project-name-version-classifier-jar-with-dependencies.jar
. 나는 같은 것을 원한다project-name-version-classifier-full.jar
기본적으로 jar-with-dependencies 어셈블리 디스크립터를 복사하고 전체를 호출하지 않고이 작업을 수행 할 수 있습니까?
또한 클래스 경로가없는 항아리를 저장소에 계속 저장하고 싶습니다.
두 가지 유물이 필요합니다. 빌드 할 영역을 보유하고있는 분류 기가있는 항아리. 영역을 포함하는 모든 종속성이있는 jar
project-name-version-region-full.jar
및 project-name-version-region.jar
저장소에 저장해야합니다. 첫 번째 예에서 분류기는 영역이 가득 차고 두 번째는 영역입니다. 후자는 효과가 있습니다.
답변
jar에 원하는 이름을 지정하기 위해 finalName 속성을 지정 하고 “jar-with-dependencies”접미사를 피하기 위해 appendAssemblyId 를 false로 지정할 수 있습니다.
아래 구성은 “test.jar”라는 jar을 출력합니다.
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2-beta-4</version>
<executions>
<execution>
<id>jar-with-dependencies</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<finalName>test</finalName>
<appendAssemblyId>false</appendAssemblyId>
</configuration>
</execution>
</executions>
</plugin>
업데이트 : 귀하의 의견에 따라 내장 디스크립터를 사용하면 작동하지 않습니다. 나는 이것이 최신 버전의 어셈블리 플러그인의 버그로 인한 것이라고 생각합니다. 분류 자에 대한 지원을 제거했지만 내장 디스크립터를 사용하면 ID가 수정되므로 큰 이름이 붙습니다.
이 문제를 해결하려면 jar-with-dependencies 설명 자가 사용하는 어셈블리 설명자를 복사 하고 ID를 수정할 수 있습니다.
이 예제는 어셈블리 ID가 finalName에 추가되도록하므로 region-full.jar 의 이름이 필요한 경우 finalName을 region으로 지정 하고 어셈블리 ID를 full 로 지정할 수 있습니다 . 결과적으로 region-full.jar라는 대상에 파일이 생성되지만 full 로 첨부 된 아티팩트로 Maven 저장소에 여전히 설치됩니다. 분류 자로 사용 . 이 ID가 다른 어셈블리의 ID와 다른 한 충돌이 없어야합니다.
pom 구성은 다음과 같습니다.
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2-beta-4</version>
<executions>
<execution>
<id>jar-with-dependencies</id>
<phase>prepare-package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptors>
<descriptor>src/main/assembly/jar-assembly.xml</descriptor>
</descriptors>
<finalName>region</finalName>
</configuration>
</execution>
</executions>
</plugin>
src / main / assembly의 jar-assembly.xml은 다음과 같습니다.
<assembly>
<id>full</id>
<formats>
<format>jar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
<dependencySet>
<unpack>true</unpack>
<scope>runtime</scope>
</dependencySet>
</dependencySets>
<fileSets>
<fileSet>
<directory>${project.build.outputDirectory}</directory>
</fileSet>
</fileSets>
</assembly>
답변
별도의 jar-assembly.xml이 없어도 pom에서 직접 구성하는 방법을 찾았습니다.
finalName이 artifactId 및 version으로 지정된다는 점을 제외하고는 기본적으로 Rich의 답변과 동일합니다.
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<finalName>${project.artifactId}-${project.version}-full</finalName>
<appendAssemblyId>false</appendAssemblyId>
<archive>
<manifest>
<mainClass>com.mycompany.MyMainClass</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-my-jar-with-dependenciess</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
답변
여기의 게시물과 maven 문서의 일부 파기 덕분에 사용자 정의 이름을 가진 일반적인 일회용 일회용 포장 항아리 어셈블리에 대한 다음 구성을 생각해 냈습니다.
pom.xml에서 :
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2</version>
<executions>
<execution>
<id>exe</id>
<phase>package</phase>
<goals><goal>single</goal></goals>
<configuration>
<finalName>MyJarName</finalName>
<attach>false</attach>
<appendAssemblyId>false</appendAssemblyId>
<descriptors>
<descriptor>assembly.xml</descriptor>
</descriptors>
<archive>
<manifest>
<mainClass>karlthepagain.MyMain</mainClass>
</manifest>
</archive>
</configuration>
</execution>
</executions>
</plugin>
assembly.xml에서 :
<assembly>
<id>exe</id>
<formats>
<format>jar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
<dependencySet>
<outputDirectory>/</outputDirectory>
<unpack>true</unpack>
<scope>runtime</scope>
</dependencySet>
</dependencySets>
</assembly>
이렇게하면 MyJarName.jar
모든 종속성이 동일한 jar 및 지정된에 다시 패키지됩니다 Main-Class: karlthepagain.MyMain
.
답변
리치에게 올바른 방향으로 나를 지적한 것에 대해 크레딧을 주려고하지만 리치가 약간 벗어 났기 때문에 저에게 도움이되는 솔루션을 게시하고 싶었습니다.
내 jar-assembly.xml은 다음과 같으며 내 프로필에 속성으로 저장된 영역의 어셈블리 ID를 변경할 수 있습니다.
<assembly>
<id>${env}-full</id>
<formats>
<format>jar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
<dependencySet>
<unpack>true</unpack>
<scope>runtime</scope>
</dependencySet>
</dependencySets>
<fileSets>
<fileSet>
<directory>${project.build.outputDirectory}</directory>
</fileSet>
</fileSets>
</assembly>
enven-full이 분류 자 인 project-name-version-env-full.jar 이름으로 프로젝트를 빌드했기 때문에 maven-assembly-plugin 설정에서 finalName 매개 변수를 사용하지 않았습니다.
어셈블리 xml이 빌드의 항목으로 매개 변수화 될 수 있다는 것을 알았을 때 놀랍습니다. 이것은 내가 찾던 것입니다.
답변
이것은 나를 위해 일했다
<build>
<finalName>anynameyoulike</finalName>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.6</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<appendAssemblyId>false</appendAssemblyId>
<archive>
<manifest>
<mainClass>com.mycompany.MyMainClass</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id> <!-- this is used for inheritance merges -->
<phase>package</phase> <!-- bind to the packaging phase -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
답변
${project.build.finalName}
최종 이름 으로 사용하여 원본 jar 파일을 덮어 쓸 수도 있습니다 .
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<finalName>${project.build.finalName}</finalName>
<appendAssemblyId>false</appendAssemblyId>
</configuration>
</plugin>