2012-04-15 41 views
7

Tôi đang sử dụng tùy chọn cấu hình preparationGoals của plugin phát hành Maven để chuyển đổi tệp bổ sung để phản ánh phiên bản của dự án đang được phát hành. Điều này làm việc rất đẹp.Maven Release Thực hiện Cam kết các tệp bổ sung

Vấn đề là khi thực hiện các cam kết, các plugin một cách rõ ràng quy định rằng chỉ pom.xml file nên được bao gồm do đó để lại các file khác của tôi uncommited:

[INFO] Executing: /bin/sh -c cd /Users/jw/dev/Test && git commit --verbose -F /var/folders/w0/hr1h_7h50f3_pwd_nrk9l808000195/T/maven-scm-114713951.commit pom.xml library/pom.xml sample/pom.xml

Có cách nào cho tôi để ghi đè này hành vi và chỉ định các tệp bổ sung hoặc globs để bao gồm trong cam kết?

(Tôi cũng cần hành vi này cho completionGoals cũng mà tôi đã cấu hình để làm điều đó cùng chuyển đổi)

+0

những tập tin nên đại diện cho các phiên bản phát hành của bạn? – khmarbaise

+0

Theo [doc tài liệu của trình giải phóng maven] (http://maven.apache.org/plugins/maven-release-plugin/examples/prepare-release.html), nó chỉ ** Cam kết các POM đã sửa đổi **. – yorkw

Trả lời

4

bạn có thể sử dụng maven-scm-plugin? Thêm thực thi plugin chạy mục tiêu scm:checkin để cam kết các tệp bạn muốn. Liên kết nó với một giai đoạn sẽ thực thi khi preparationGoals được chạy (nếu bạn đã chỉ định một hoặc nhiều giai đoạn làm giá trị cho thành phần đó) hoặc bao gồm trực tiếp mục tiêu scm:checkin trong preparationGoals.

+0

+1 Đây có lẽ là giải pháp duy nhất tại thời điểm này, con là nó có thể gây rắc rối nếu rollback được thực hiện sau này, như đã đề cập trong [thảo luận SO tương tự] (http://stackoverflow.com/questions/10583434/commit- some-files-while-maven-releaseprepare). – yorkw

+0

Bất kỳ ai có một ví dụ về điều này làm việc? – Christopher

+0

Tôi đã có thể làm việc này cho một tệp duy nhất, nhưng không phải cho nhiều tệp. Nó hoạt động khi thực hiện thủ công, nhưng không phải khi tôi đặt nó trong các mục tiêu chuẩn bị, với một danh sách được phân tách bằng dấu phẩy. – Christopher

0

Dường như việc không cho phép đặc điểm kỹ thuật của các tệp thẻ bổ sung thực sự là lỗi trong Maven. Trên dòng 130 trong lớp org.apache.maven.shared.release.phase.AbstractScmCommitPhase của Maven Release Plugin, có tham chiếu đến cờ "commitByProject" được giới thiệu lần đầu tiên trong Maven 2.0-beta-7.

Chi nhánh được sử dụng để xác định cơ chế theo đó tệp được thêm vào bản phát hành Maven: chuẩn bị cam kết. Plugin SCM được tải với các tệp trước cam kết sử dụng SCMFileSet class. Một trong các instantiation nhánh của lớp đó có thể đã cố gắng thêm tất cả các tệp trong thư mục cơ sở, nhưng nó không hoạt động theo cách đó trong SCM.

Đây là điểm mà bản sửa lỗi có thể được triển khai để lấy danh sách tệp hoặc thêm thư mục tệp cần cam kết.

Dòng dưới cùng, sau khi lặn sâu vào thực thi gỡ lỗi của Maven Release Plugin, nó sẽ gọi Plugin SCM chỉ để thêm POM từ repos. Việc thay đổi cờ "commitByProject" không được ghi nhận tài liệu không có tác động đến các kết quả đối với các tệp được thêm vào cam kết SCM.

0

Tôi cũng cần phải cam kết một số tệp bổ sung (thay đổi bằng plugin Maven Replacer).Tôi đã làm nó theo cách sau:

Trước tiên tôi cấu hình Maven Release plugin để thực hiện mục tiêu bổ sung:

<plugin> 
    <artifactId>maven-release-plugin</artifactId> 
    <version>2.5.3</version> 
    <configuration> 
     <preparationGoals>-Prelease -DreplacerVersion="${releaseVersion}" clean replacer:replace scm:checkin verify</preparationGoals> 
     <completionGoals>-Prelease -DreplacerVersion="${developmentVersion}" clean replacer:replace scm:checkin verify</completionGoals> 
    </configuration> 
</plugin> 
  • release hồ sơ xác định cấu hình của Maven SCM Plugin
  • replacerVersion lập luận được sử dụng bởi Maven Replacer plugin để đặt phiên bản chính xác trong một số tệp
  • clean là mục tiêu chuẩn do plugin Maven Release phát hành (mặc định: clean verify)
  • replacer:replace mục tiêu có trách nhiệm sửa đổi các file
  • scm:checkin không cam kết và đẩy
  • verify là một mục tiêu chuẩn chạy bằng Maven phát hành plugin (mặc định: clean verify)

Tiếp theo tôi cấu hình Maven Replacer plugin:

<plugin> 
    <groupId>com.google.code.maven-replacer-plugin</groupId> 
    <artifactId>replacer</artifactId> 
    <version>1.5.3</version> 
    <configuration> 
     <includes> 
      <include>${basedir}/file1.txt</include> 
      <include>${basedir}/file2.txt</include> 
     </includes> 
     <replacements> 
      <replacement> 
       <token><![CDATA[<pattern>.*</pattern>]]></token> 
       <value><![CDATA[<pattern>${replacerVersion}</pattern>]]></value> 
      </replacement> 
     <replacement> 
    </configuration> 
</plugin> 

${replacerVersion} cho phép sử dụng cùng cấu hình cho việc thay đổi từ develo pment để phát hành và tiếp theo từ bản phát hành sang phiên bản phát triển tiếp theo.

Cuối cùng tôi đã xác định được phiên bản của Maven SCM plugin Tôi muốn sử dụng:

<plugin> 
    <artifactId>maven-scm-plugin</artifactId> 
    <version>1.9.5</version> 
</plugin> 

và cấu hình nó trong hồ sơ cá nhân release (tôi định nghĩa nó trong hồ sơ cá nhân để ngăn chặn cam ngẫu nhiên trong không phát hành xây dựng):

<profile> 
    <id>release</id> 
    <build> 
     <pluginManagement> 
      <plugins> 
       <plugin> 
        <artifactId>maven-scm-plugin</artifactId> 
        <configuration> 
         <message>[maven-scm-plugin] set ${replacerVersion} version in files</message> 
         <includes>file1.txt, file2.txt</includes> 
        </configuration> 
       </plugin> 
      </plugins> 
     </pluginManagement> 
    </build> 
</profile> 

Nhờ đó sau khi thực hiện một lệnh:

mvn release:prepare -DdevelopmentVersion=1.2.1-SNAPSHOT -DreleaseVersion=1.2.0 -Dtag=1.2.0 

tôi thấy 4 cam kết:

  1. [maven-SCM-plugin] thiết 1.2.0 phiên bản trong các tập tin
  2. [maven-release-Plugin] chuẩn bị phát hành 1.2.0
  3. [maven-scm- Plugin] thiết lập phiên bản 1.2.1-SNAPSHOT trong các tập tin
  4. [maven-release-Plugin] chuẩn bị cho sự phát triển tiếp theo lặp
Các vấn đề liên quan