2

여러 소규모 서비스로 구성된 응용 프로그램의 구성에 maven을 사용하고 있습니다. java에서 개발 된 대부분의 서비스는 동일한 빌드 라이프 사이클 에서처럼 동일한 메이븐 구성, 일부 공유 리소스 (예 : AMQP)를 공유합니다.Maven antrun copy/shade : shade goal을 어떻게 동적으로 건너 뛰는가?

그래서 SuperPom에서 공유 리소스를 구성했습니다.

그늘 플러그인이 실제로 설치 과정을 방해하지 않는 것처럼 보이지만, antrun 플러그인은 그늘 플러그인으로 jar 파일을 만들지 않기 때문에 복사해야하는 파일을 찾을 수 없습니다.

음영/antrun 플러그인의 구성을 SuperPom에서 추상화하려면 그늘/복사 목표를 건너 뛸 필요가 있습니다. 받는다는 그늘 - 플러그인을 건너 뛸 수있는 parameter이없는

<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>Test</groupId> 
    <artifactId>SuperTest</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>pom</packaging> 
    <properties> 
     <log4j.version>1.2.17</log4j.version> 
     <destination>pleasedeleteme</destination> 
     <mainpackage>com.uk.cc.it.info.gov.test.xxx</mainpackage> 
    </properties> 

    <build> 
     <plugins> 
      <plugin> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>3.1</version> 
       <configuration> 
        <source>1.7</source> 
        <target>1.7</target> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-shade-plugin</artifactId> 
       <version>2.2</version> 
       <executions> 
        <execution> 
         <phase>package</phase> 
         <goals> 
          <goal>shade</goal> 
         </goals> 
         <configuration> 
          <transformers> 
           <transformer 
            implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> 
            <mainClass>${mainpackage}.Main</mainClass> 
           </transformer> 
          </transformers> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-dependency-plugin</artifactId> 
       <version>2.8</version> 
       <executions> 
        <execution> 
         <id>copy</id> 
         <phase>package</phase> 
         <goals> 
          <goal>copy</goal> 
         </goals> 
         <configuration> 
          <artifactItems> 
           <artifactItem> 
            <groupId>${groupId}</groupId> 
            <artifactId>${artifactId}</artifactId> 
            <version>${version}</version> 
            <type>jar</type> 
            <overWrite>true</overWrite> 
            <outputDirectory>${destination}</outputDirectory> 
           </artifactItem> 
          </artifactItems> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 
    <dependencies> 
     <dependency> 
      <groupId>log4j</groupId> 
      <artifactId>log4j</artifactId> 
      <version>${log4j.version}</version> 
     </dependency> 
    </dependencies> 

</project> 

답변

3

: 당신이 연주하는

나는 작은 샘플은 여기 mvn clean install -Dmaven.shade.skip=true, mvn clean install -Dmaven.copy.skip=true, mvn clean install -Dmaven.shade.shade.skip=true

인 노력했다. 흔히 그늘 플러그인은 단지 재미만을위한 것이 아니기 때문에 실제로 이것을 건너 뛰고 싶은지 궁금 할 것입니다. 당신이 여전히 유효 생각한다면, 당신은 다음과 같이 활성화에 프로필을 만들 수 있습니다

<activation> 
    <property> 
    <name>skipShade</name> 
    <value>!true</value> 
    </property> 
</activation> 

당신이 -DskipShade 또는 -DskipShade=true를 추가하지 않는 한이 기본적으로 활성화되어이 방법.

+0

에도 불구하고, 당신도 내 읽어 신경 않았다

<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>2.3</version> <executions> <execution> <id>shade</id> <phase>none</phase> <goals> <goal>shade</goal> </goals> <configuration> <!-- ... --> </configuration> </execution> </executions> </plugin> 

그리고 그것을 필요로하는 아동 리딩에

? 모든 서비스에 대해 동일한 빌드 프로세스를 슈퍼 퍽으로 추상화하려고합니다. 하지만 그 위에 음영/antrun 플러그인을 포함 시키면 ** SuperPom **을 설치할 수 없습니다. 그냥 분명히 : SuperPom은 다른 사람들이 상속받은 하나의 POM 파일입니다. 그늘, 포장 또는 복사 할 것이 아무것도 ... – minime

4

super-pom에서 maven-shade-plugin의 위상을 none으로 설정 한 다음 클라이언트 poms에서이를 재정의 했습니까? 그래서 부모 치어의

: 귀하의 게시물이 도움이된다

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-shade-plugin</artifactId> 
    <!-- no need to specify version --> 
    <executions> 
     <execution> 
      <id>shade</id> 
      <phase>package</phase> 
      <!-- no need to specify configuration --> 
     </execution> 
    </executions> 
</plugin> 
관련 문제