Maven2를 사용하여 dev 환경에서 dev-server 디렉토리로 복사하려는 구성 파일과 다양한 문서가 있습니다. 이상하게도 Maven은이 작업에서 강력 해 보이지 않습니다.
옵션 중 일부 :
- Maven에서 간단한 복사 작업 사용
<copy file="src/main/resources/config.properties" tofile="${project.server.config}/config.properties"/>
-
Ant 플러그인을 사용하여 Ant 에서 사본 을 실행 하십시오 .
-
일반적으로 jar 유형 인 POM의 “주요”아티팩트와 함께 zip 유형의 아티팩트를 구성한 다음 저장소에서 대상 디렉토리로 해당 아티팩트 를 압축 해제 하십시오.
-
아래에 언급 된 것처럼 maven-resources 플러그인.
-
Maven Assembly 플러그인-간단하고 “전통적으로”일하고 싶을 때 많은 수동 정의가 필요한 것 같습니다.
-
이 페이지 는 플러그인을 빌드하여 복사하는 방법도 보여줍니다!
-
아래에 언급 된 것처럼 maven-upload 플러그인.
-
받는다는 – 종속성 – 플러그인 과 사본 아래에 언급 한 바와 같이.
-
이 모든 것이 불필요하게 임시로 보입니다. Maven은 번거롭지 않고 이러한 표준 작업을 수행하는 데 탁월합니다.
어떤 충고?
답변
Antrun 플러그인에서 부끄러워하지 마십시오. 일부 사람들은 Ant와 Maven이 반대에 있다고 생각하는 경향이 있기 때문에 그렇지 않습니다. 피할 수없는 일회성 사용자 정의를 수행해야하는 경우 복사 작업을 사용하십시오.
<project>
[...]
<build>
<plugins>
[...]
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<phase>deploy</phase>
<configuration>
<tasks>
<!--
Place any Ant task here. You can add anything
you can add between <target> and </target> in a
build.xml.
-->
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
[...]
</project>
이 질문에 대답하면서, 나는 당신이 요구 한 것에 대한 세부 사항에 초점을 맞추고 있습니다. 파일을 어떻게 복사합니까? 질문과 변수 이름은 “서버 프로비저닝을 다루는 더 좋은 방법이 있습니까?”와 같은 더 큰 질문으로 이어집니다. Maven을 빌드 시스템으로 사용하여 배치 가능한 아티팩트를 생성 한 다음 별도의 모듈 또는 다른 곳에서 이러한 사용자 정의를 수행하십시오. 빌드 환경을 조금 더 공유 한 경우 더 나은 방법이있을 수 있습니다. 여러 서버를 프로비저닝하는 플러그인이 있습니다. 서버 루트에 압축이 풀린 어셈블리를 첨부 할 수 있습니까? 어떤 서버를 사용하고 있습니까?
다시 한 번 더 나은 방법이 있다고 확신합니다.
답변
<build>
<plugins>
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.3</version>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include> **/*.properties</include>
</includes>
</resource>
</resources>
...
</build>
답변
파일을 복사하려면 다음을 사용하십시오.
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.1.0</version>
<executions>
<execution>
<id>copy-resource-one</id>
<phase>install</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${basedir}/destination-folder</outputDirectory>
<resources>
<resource>
<directory>/source-folder</directory>
<includes>
<include>file.jar</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
하위 폴더가있는 폴더를 복사하려면 다음 구성을 사용하십시오.
<configuration>
<outputDirectory>${basedir}/target-folder</outputDirectory>
<resources>
<resource>
<directory>/source-folder</directory>
<filtering>true</filtering>
</resource>
</resources>
</configuration>
답변
maven 의존성 플러그인은 개미 작업을 좋아하는 많은 시간을 절약했습니다.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>install-jar</id>
<phase>install</phase>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>...</version>
</artifactItem>
</artifactItems>
<outputDirectory>...</outputDirectory>
<stripVersion>true</stripVersion>
</configuration>
</execution>
</executions>
</plugin>
의존성 : 복사 documentend이며, 압축 풀기와 같은 더 유용한 목표를 가지고있다.
답변
간단한 복사 작업의 경우 copy-rename-maven-plugin을 추천 할 수 있습니다 . 사용이 간단하고 간단합니다.
<project>
...
<build>
<plugins>
<plugin>
<groupId>com.coderplus.maven.plugins</groupId>
<artifactId>copy-rename-maven-plugin</artifactId>
<version>1.0</version>
<executions>
<execution>
<id>copy-file</id>
<phase>generate-sources</phase>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<sourceFile>src/someDirectory/test.environment.properties</sourceFile>
<destinationFile>target/someDir/environment.properties</destinationFile>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
둘 이상의 파일을 복사하려면 <sourceFile>...</destinationFile>
부품을
<fileSets>
<fileSet>
<sourceFile>src/someDirectory/test.environment.properties</sourceFile>
<destinationFile>target/someDir/environment.properties</destinationFile>
</fileSet>
<fileSet>
<sourceFile>src/someDirectory/test.logback.xml</sourceFile>
<destinationFile>target/someDir/logback.xml</destinationFile>
</fileSet>
</fileSets>
또한 필요한 경우 여러 단계에서 여러 실행을 지정할 수 있습니다. 두 번째 목표는 “이름 바꾸기”입니다. 이는 나머지 구성이 동일하게 유지되는 동안 간단히 말해줍니다. 더 많은 사용 예는 Usage-Page를 참조하십시오 .
참고 :이 플러그인은 디렉토리가 아닌 파일 만 복사 할 수 있습니다. (이 제한 사항을 찾은 @ james.garriss에게 감사합니다.)
답변
위의 개미 솔루션은 구성하기가 가장 쉽지만 Atlassian의 maven-upload-plugin을 사용하여 운이 좋았습니다. 좋은 문서를 찾을 수 없었습니다. 사용 방법은 다음과 같습니다.
<build>
<plugin>
<groupId>com.atlassian.maven.plugins</groupId>
<artifactId>maven-upload-plugin</artifactId>
<version>1.1</version>
<configuration>
<resourceSrc>
${project.build.directory}/${project.build.finalName}.${project.packaging}
</resourceSrc>
<resourceDest>${jboss.deployDir}</resourceDest>
<serverId>${jboss.host}</serverId>
<url>${jboss.deployUrl}</url>
</configuration>
</plugin>
</build>
위에서 참조한 “$ {jboss.host}”와 같은 변수는 내 ~ / .m2 / settings.xml에 정의되어 있으며 maven 프로파일을 사용하여 활성화됩니다. 이 솔루션은 JBoss에 국한되지 않고 변수 이름입니다. 개발, 테스트 및 라이브에 대한 프로필이 있습니다. 테스트 환경에서 귀를 jboss 인스턴스에 업로드하려면 다음을 실행하십시오.
mvn upload:upload -P test
settings.xml의 스 니펫은 다음과 같습니다.
<server>
<id>localhost</id>
<username>username</username>
<password>{Pz+6YRsDJ8dUJD7XE8=} an encrypted password. Supported since maven 2.1</password>
</server>
...
<profiles>
<profile>
<id>dev</id>
<properties>
<jboss.host>localhost</jboss.host>
<jboss.deployDir>/opt/jboss/server/default/deploy/</jboss.deployDir>
<jboss.deployUrl>scp://root@localhost</jboss.deployUrl>
</properties>
</profile>
<profile>
<id>test</id>
<properties>
<jboss.host>testserver</jboss.host>
...
이 플러그인이있는 Atlassian maven 저장소는 https://maven.atlassian.com/public/
플러그인이 제공하는 모든 기능을 보려면 소스를 다운로드하고 내부 설명서를 참조하십시오.
`
답변
글쎄, maven은 훌륭한 세분화 작업을 잘하지 않아야하며, bash 나 개미와 같은 스크립팅 언어가 아니며 오히려 선언적입니다-나는 전쟁이나 귀가 필요합니다. 그러나 전쟁이나 귀가 어떻게 보이는지 사용자 정의 해야하는 경우 문제가 있습니다. 그것은 개미처럼 절차 적이 지 않고 선언적입니다. 이것은 처음에는 몇 가지 장점이 있으며 끝에 많은 단점이있을 수 있습니다.
초기 개념은 훌륭한 플러그인을 가진 것으로 생각합니다. “그냥 작동”하지만 비표준 작업을 수행하면 현실이 다릅니다.
그러나 pom에 많은 노력을 기울이고 사용자 정의 플러그인을 거의 사용하지 않으면 개미와 같이 훨씬 더 나은 빌드 환경을 얻을 수 있습니다 (물론 프로젝트에 따라 다르지만 더 큰 프로젝트에서는 점점 더 사실입니다).