항아리 유물의 메이븐 최종 이름 제어
생성된 아티팩트의 수신처로 모든 하위 프로젝트에서 사용할 속성을 슈퍼 폼에 정의하려고 합니다.
그래서 이걸 위해서project/build/finalName
그러나 이는 단순한 POM에도 효과가 없는 것 같습니다.
명령어
mvn archetype:create \
-DarchetypeGroupId=org.apache.maven.archetypes \
-DgroupId=com.mycompany.app \
-DartifactId=my-app
폼
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany.app</groupId>
<artifactId>my-app</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>my-app</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<build>
<finalName>${project.name}-testing</finalName>
</build>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
그리고 실행했을 때:
$ mvn install
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Building my-app
[INFO] task-segment: [install]
[INFO] ------------------------------------------------------------------------
[INFO] [resources:resources {execution: default-resources}]
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /tmp/mvn_test/my-app/src/main/resources
[INFO] [compiler:compile {execution: default-compile}]
[INFO] Nothing to compile - all classes are up to date
[INFO] [resources:testResources {execution: default-testResources}]
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /tmp/mvn_test/my-app/src/test/resources
[INFO] [compiler:testCompile {execution: default-testCompile}]
[INFO] Nothing to compile - all classes are up to date
[INFO] [surefire:test {execution: default-test}]
[INFO] Surefire report directory: /tmp/mvn_test/my-app/target/surefire-reports
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running com.mycompany.app.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.024 sec
Results :
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO] [jar:jar {execution: default-jar}]
[INFO] [install:install {execution: default-install}]
[INFO] Installing /tmp/mvn_test/my-app/target/my-app-testing.jar to /home/maxim/.m2/repository/com/mycompany/app/my-app/1.0-SNAPSHOT/my-app-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2 seconds
[INFO] Finished at: Sun Nov 21 18:37:02 IST 2010
[INFO] Final Memory: 17M/162M
[INFO] ------------------------------------------------------------------------
생성된 아티팩트 이름 어딘가에 "testing" 문자열이 표시될 것입니다.
"final Name"의 용도를 잘못 알고 있습니까?
Maven > = 3의 경우
<packaging>jar</packaging>
<build>
<finalName>WhatEverYouLikey</finalName>
</build>
오래된 Maven 버전의 경우
사용자가 설정한다.finalName
플러그인 구성 섹션의 속성:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<finalName>myJar</finalName>
</configuration>
</plugin>
공식 문서에 명시된 바와 같이.
제시된 답변은 모두 필요 이상으로 복잡합니다.jar 파일을 빌드하고 있다고 가정할 때 필요한 것은,<jar.finalName>
에 태그 붙입니다.<properties>
섹션:
<properties>
<jar.finalName>${project.name}</jar.finalName>
</properties>
그러면 다음과 같이 항아리가 생성됩니다.
project/target/${project.name}.jar
이는 매뉴얼에 기재되어 있습니다.User Property
:
finalName:
Name of the generated JAR.
Type: java.lang.String
Required: No
User Property: jar.finalName
Default: ${project.build.finalName}
명령줄 사용 현황
명령줄에서 다음 옵션도 사용할 수 있어야 합니다.
mvn -Djar.finalName=myCustomName ...
아직 테스트하지 않았지만 myCustomName.jar가 필요합니다.
@최대
이거 먹어봐...
pom.xml
<groupId>org.opensource</groupId>
<artifactId>base</artifactId>
<version>1.0.0.SNAPSHOT</version>
..............
<properties>
<my.version>4.0.8.8</my.version>
</properties>
<build>
<finalName>my-base-project</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<version>2.3.1</version>
<executions>
<execution>
<goals>
<goal>install-file</goal>
</goals>
<phase>install</phase>
<configuration>
<file>${project.build.finalName}.${project.packaging}</file>
<generatePom>false</generatePom>
<pomFile>pom.xml</pomFile>
<version>${my.version}</version>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
통신 mvn clean install
산출량
[INFO] --- maven-jar-plugin:2.3.1:jar (default-jar) @ base ---
[INFO] Building jar: D:\dev\project\base\target\my-base-project.jar
[INFO]
[INFO] --- maven-install-plugin:2.3.1:install (default-install) @ base ---
[INFO] Installing D:\dev\project\base\target\my-base-project.jar to H:\dev\.m2\repository\org\opensource\base\1.0.0.SNAPSHOT\base-1.0.0.SNAPSHOT.jar
[INFO] Installing D:\dev\project\base\pom.xml to H:\dev\.m2\repository\org\opensource\base\1.0.0.SNAPSHOT\base-1.0.0.SNAPSHOT.pom
[INFO]
[INFO] --- maven-install-plugin:2.3.1:install-file (default) @ base ---
[INFO] Installing D:\dev\project\base\my-base-project.jar to H:\dev\.m2\repository\org\opensource\base\4.0.8.8\base-4.0.8.8.jar
[INFO] Installing D:\dev\project\base\pom.xml to H:\dev\.m2\repository\org\opensource\base\4.0.8.8\base-4.0.8.8.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
패키지 단계에서 플러그인은 파일 매핑을 통해 가져온 파일 이름을 구성할 수 있습니다.
마비된 귀의
http://maven.apache.org/plugins/maven-ear-plugin/examples/customize-file-name-mapping.html
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ear-plugin</artifactId>
<version>2.7</version>
<configuration>
[...]
<fileNameMapping>full</fileNameMapping>
</configuration>
</plugin>
http://maven.apache.org/plugins/maven-war-plugin/war-mojo.html#outputFileNameMapping
프로파일 등을 사용하여 버전을 '테스트 중'으로 구성한 경우 다음과 같이 전쟁 패키지에 사용할 수 있습니다.
전쟁터
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.2</version>
<configuration>
<encoding>UTF-8</encoding>
<outputFileNameMapping>@{groupId}@-@{artifactId}@-@{baseVersion}@@{dashClassifier?}@.@{extension}@</outputFileNameMapping>
</configuration>
</plugin>
난 이거면 돼
mvn jar:jar -Djar.finalName=custom-jar-name
사용하고 있는 어프로치에서는, 지정한 대로, 이름에 「testing」이라고 하는 문자열이 붙은 jar 파일이 실제로 행해집니다만, 디폴트의 install 커맨드는, 다음의 출력 행에 나타나듯이, ~/.m2/repository 디렉토리에 송신합니다.
/tmp/mvn_test/my-app/target/my-app-testing.jar to /home/maxim/.m2/repository/com/mycompany/app/my-app/1.0-SNAPSHOT/my-app-1.0-SNAPSHOT.jar
그런 이름의 항아리를 생성하여 원하는 디렉토리에 복사하려는 것 같습니다.
output Directory 속성을 사용해 보십시오.http://maven.apache.org/plugins/maven-jar-plugin/jar-mojo.html
다음을 사용하고 있습니다.
....
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<finalName>${project.groupId}/${project.artifactId}-${baseVersion}.${monthlyVersion}.${instanceVersion}</finalName>
</configuration>
</plugin>
....
이렇게 하면 다른 시스템의 Jenkins에서 각 값을 개별적으로 또는 실용적으로 정의할 수 있습니다.
mvn package -DbaseVersion=1 -monthlyVersion=2 -instanceVersion=3
됩니다.target\{group.id}\projectName-1.2.3.jar
시간을 절약하는 더 좋은 방법은
....
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<finalName>${project.groupId}/${project.artifactId}-${baseVersion}</finalName>
</configuration>
</plugin>
....
변수로 쓰는 것 빼고는 똑같아요.
mvn package -DbaseVersion=0.3.4
됩니다.target\{group.id}\projectName-1.2.3.jar
쓸 수 요.outputDirectory
의 of의 configuration
이치노
mavene 프로젝트에서 사용하고 있는 것은 다음과 같습니다.
<build>
<finalName>shop</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>${maven.war.version}</version>
<configuration><webappDirectory>${project.build.directory}/${project.build.finalName} </webappDirectory>
</configuration>
</plugin>
</plugins>
</build>
가장 심플한 솔루션:
<artifactId>Example</artifactId>
<version>1.0</version>
<properties>
<jarName>${project.artifactId}-${project.version}</jarName>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<finalName>${jarName}</finalName>
</configuration>
</plugin>
</plugins>
</build>
그 결과:
mvn clean package -DjarName=123
-> target/123.jar
mvn clean package
-> target/Example.jar
은 을 붙이는 합니다.<finalName>jar_name<finalName>
springboot-mysql"이라고 부릅니다
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<finalName>springboot-mysql</finalName>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
당신의 항아리 이름 안 어디든지
언급URL : https://stackoverflow.com/questions/4238944/controlling-maven-final-name-of-jar-artifact
'sourcecode' 카테고리의 다른 글
C++ 프로그램에 대한 C 라이브러리 사용 (0) | 2022.07.27 |
---|---|
값별 트리 맵 정렬 (0) | 2022.07.27 |
Vue.js가 컴포넌트 내부에 부울 변경을 저장합니다. (0) | 2022.07.27 |
온도 변수 때문에 프로그램이 느려집니까? (0) | 2022.07.27 |
가져오기 요청에서 데이터를 추출하여 내보냅니다. (0) | 2022.07.27 |