2016-10-31 4 views
0

Maven RPM 플러그인을 사용하기 위해 원래 spec 파일로 수행 된 일부 RPM을 업데이트 중입니다. 원래의 설정은 다소 복잡하지만 4 개의 다른 프로젝트에서 사용되는 "공통"프로젝트를 포함합니다. spec 파일은 일반적인 프로젝트뿐 아니라 매개 변수를 사용하여 특정 작업을 지정하는 셸 스크립트 (예 : 폴더 이름을 만들 때 프로젝트 A와 프로젝트 B를 구별하기 위해 사용됨)에 있습니다. 쉘 스크립트에 전달 된 매개 변수를 처리하는 프로파일을 만들고 싶습니다. 그 스크립트는 내가하지 않아도 재 작업하고 싶지 않은 많은 것들을 처리합니다. 프로파일에서 설정 한 값을 쉘 스크립트 매개 변수로 사용하는 방법이 있습니까? 최소한 쉘 스크립트를 postInstallScriptlet으로 사용하십시오.Maven 프로파일의 변수를 RPM 플러그인이있는 postinstallScriptlet의 매개 변수로 사용할 수 있습니까?

이것은 모두 Linux (Centos 6)입니다.

ENVIRONMENT=$1 
INSTALL_DIR=$2 

가 어떻게 그 두 가지가 함께 작동하도록 할 수 있습니다

<profile> 
    <id>beta</id> 
    <properties> 
     <ENVIRONMENT>Beta</ENVIRONMENT> 
     <INSTALL_DIR>/var/ProjA</INSTALL_DIR> 
    </properties> 
</profile> 

스크립트 파일이 뭔가를했을 :

그래서, 프로파일은 다음과 같이 보일 것인가?

답변

0

추가 사냥 및 실험을 마친 후이를 해결할 수있었습니다. 높은 수준에서이를 수행하는 방법을 설명하는 두 가지 질문이 있습니다. 링크 아래에, 나는 이것을 유용한 예제로 만들기 위해 내가 한 일을 보여줄 것이다.

does-an-external-script-in-rpm-maven-plugin-have-access-to-maven-properties

using-maven-rpm-plugin-how-do-i-to-replace-text-in-files-similar-to-the-assembly

플러그인 섹션은 다음과 같습니다

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-resources-plugin</artifactId> 
    <version>3.0.1</version> 
    <executions> 
     <execution> 
     <id>copy-resources</id> 
     <phase>validate</phase> 
     <goals> 
      <goal>copy-resources</goal> 
     </goals> 
     <configuration> 
      <outputDirectory>${basedir}/bin</outputDirectory> 
      <resources> 
       <resource> 
        <!-- note that this will process all files in this directory -->     
        <directory>trunk/rpm_scripts/resources</directory> 
        <filtering>true</filtering> 
       </resources> 
     </configuration> 
     </execution> 
    </executions> 
</plugin> 

그런 다음 프로필에 :

<profile> 
    <id>beta</id> 
    <properties> 
     <VERSION>5.0.0</VERSION> 
     <MODULE>Project A</MODULE> 
     <!-- and more --> 
    </properties> 
</profile> 

그리고 postinstallScriptlet 파일 :

VERSION=${VERSION} 
MODULE=${MODULE} 

이 결과 파일은 모든 변수 대체가 수행 된 $ {basedir}/bin 디렉토리로 복사됩니다. 이것은 내가 원했던 것이므로 다른 사람에게 도움이되기를 바랍니다.