2013-08-14 5 views
1

mvn release:prepare이 실행될 때만 특정 jUnit을 실행해야합니다. 이 jUnit은 개발자가 데이터베이스 활동을 먼저 실행했는지 확인하기 위해 mvn install 또는 다른 목표에서 실행하지 않습니다.maven release : junit 준비

junit이 매개 변수 (?)를 통해 실행중인 프로세스가 release:prepare인지 알 수있는 방법이 있습니까?

pom.xml 내에서이 jUnit이 해당 목표에서만 실행된다는 것을 정의하는 방법이 있습니까?

나는 이것에 대한 검색을 해왔고 아직 해결 방법이 없다고 생각한다. 어떤 도움을 주셔서 감사합니다!

답변

1

난 당신이 원하는 것을 정확히 수행하지 않은하지만 키가 확실한 아래 <executions> 섹션을 사용하는 것입니다

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <configuration> 
     ... exclude the test from normal execution ... 
    </configuration> 
    <executions> 
     <execution> 
     <id>release-phase</id> 
     <phase>release-prepare</phase> 
     <goals> 
      <goal>test</goal> 
     </goals> 
     <configuration> 
      ... fill this in to include the tests you want ... 
     </configuration> 
     </execution> 
    </executions> 
<plugin> 

은 또한 정상 <configuration> 섹션에서이 테스트를 제외 할 것입니다.

HERE

+0

나는 올바른 방향으로 가고 있었다고 생각합니다! :) 나는 이것을 만들기 시작했으나 그것을 완성하는 방법이나 그것이 효과가 있는지 알지 못했습니다. 이걸 주셔서 고마워요 !!! – Steve

+0

이 답변은 쓰여지지 않습니다.더 자세한 설명은 내 대답을 참조하십시오. TL, DR에는 '준비 준비'단계가 없습니다. –

+0

@StephenConnolly Hmmmm. 릴리즈 준비 단계가 없습니다. 나는'release-prepare'가 옳지 않다는 것을 알았지 만 (위의 면책 조항에 유의하십시오), 릴리즈 할 때 독특한 단계가있었습니다. 나는 그렇지 않다. –

1

기타 가까운 몇 가지 관련 정보 ...하지만 시가가 있습니다.

Maven이 릴리스를 실행하면 릴리스 프로세스에 특별한 단계가 없습니다. 원하는 작업을 포함하도록 구성된 프로필을 추가하는 것입니다.

<profiles> 
    <profile> 
    <id>release-preflight-checks</id> 
    <build> 
     <plugins> 
     <plugin> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <executions> 
      <execution> 
       <id>release-preflight-checks</id> 
       <goals> 
       <goal>test</goal> 
       </goals> 
       <configuration> 
       .. include your test here 
       </configuration> 
      </execution> 
      </executions> 
     </plugin> 
     </plugins> 
    </build> 
    </profile> 
</profiles> 

그런 다음 당신은, 당신은 단지 release:prepare 년대 포크 실행 중에이 프로필이 활성화되어야한다고 메이븐을 말할 필요가 드디어 프리 플라이트 검사에게 다음

<build> 
    <plugins> 
    ... 
    <plugin> 
     <artifactId>maven-surefire-plugin</artifactId> 
     <configuration> 
     .. exclude your test here 
     </configuration> 
    </plugin> 
    ... 
    </plugins> 
</build> 

그리고 실행하지 기본적으로 확실한 구성해야

<build> 
    <plugins> 
    ... 
    <plugin> 
     <artifactId>maven-release-plugin</artifactId> 
     <configuration> 
     ... 
     <preparationGoals>clean verify -P+release-preflight-checks</preparationGoals> 
     ... 
     </configuration> 
    </plugin> 
    ... 
    </plugins> 
</build> 

참고 : 당신이에 프로파일을 추가하도록 프로파일 이름 앞에 +을 가지고 매우 중요합니다 활성 프로필 목록을 사용하지 않으면 release:prepare 단계에서 빌드가 릴리스 프로필이 활성 상태로 작동하는지 유효성을 검사하지 않으며 이후에 release:perform을 실패 할 수 있습니다.

참고 : 덜 복잡한 경로는 사용중인 릴리스 프로필에 확실한 구성을 넣는 것입니다 (기본값은 release이지만 기본적으로 상위 pom을 통해 변경할 수 있으므로 오류가 발생하기 쉽습니다). 예를 들어, 프로젝트를 중앙으로 푸시하기로 결정하면, sonatype-oss-parent는 릴리스 프로파일을 sonatype-release으로 변경합니다. 그러면 pom이 일치하도록 변경할 때까지 테스트가 실행되지 않으므로 빌드가 실패한 것을 볼 수 없습니다 새로운 릴리스 프로파일의 ID ... -P+release-preflight-checks을 사용하면 프로파일이 이고 항상이 활성화되어 release:prepare에 대해 활성화되고 요청자의 원래 요구 사항을 완전히 충족시킬 수 있습니다. 즉 release:prepare에 대해서만 실행되며 실행되지 않습니다. release:perform 실행이 릴리스 프로파일에 추가 된 경우)

+0

OP가 릴리스를 수행하는 사람이 릴리스와 관련된 데이터베이스를 완료하고 코드를 테스트하지 않고 해당 프로토콜을 확인하기 위해 junit 테스트를 사용했는지 확인하기 위해 OP가이를 수행하려고하는지 궁금합니다. 그럴 경우 플러그인 기반 변형으로 작성하는 것이 더 쉬운 것인지 궁금합니다. 'maven-is-release-ok-plugin' 일종의 일종. –

+0

플러그인이 Apache Maven 프로젝트 자체에 의해 호스팅되지 않을 가능성이 높기 때문에'is-release-ok-maven-plugin'이라는 이름을 사용하는 것이 더 낫습니다. 그렇지 않으면 필자는 PMC :-( –

+0

이전 메시지의 "일종의"를 참조하고 변호사를 부르십시오. :) –

관련 문제