2010-10-20 15 views
7

Tôi vừa dịch một dự án kiến ​​thành maven tuy nhiên kể từ khi maven không thực sự đối phó với triển khai tôi giới thiệu một số antrun vào xây dựng. Tuy nhiên khi tôi cố gắng thực hiện nó, các plugin bỏ qua nhiệm vụ của tôi. cho exemple khi tôi chạy mvn sạch antrun: chạy Tôi nhận được thông báo sau: Không có ant mục tiêu xác định - SKIPPED. điều tương tự cũng xảy ra với giai đoạn thứ hai, trong đó tôi đang cố gắng ghi đè giai đoạn triển khai để thực hiện triển khai thực tế thay vì tải lên một kho lưu trữ.Làm thế nào để ràng buộc maven antrun plugin vào pha sạch

Hãy tìm thấy bên dưới một trích pom.xml của tôi (loại: pom):

  <plugin> 
      <artifactId>maven-antrun-plugin</artifactId> 
      <version>1.6</version> 
      <executions> 
       <execution> 
        <id>clean</id> 
        <configuration> 
         <task> 
          <echo>Cleaning deployed website</echo> 
         </task> 
         <tasks> 
          <delete dir="${deployRoot}/mydir/${env}"/> 
         </tasks> 
        </configuration> 
        <phase>clean</phase> 
        <goals> 
         <goal>run</goal> 
        </goals> 
       </execution> 
       <execution> 
        <id>deployment</id> 
        <configuration> 
         <task> 
          <echo>Deploying website</echo> 
         </task> 
         <tasks> 
          <echo>Copying website artifact to deployment </echo> 
          <mkdir dir="${deployRoot}/mydir/${env}" /> 
          <unzip 
           src="${project.basedir}/target/${env}.${project.version}.zip" 
           dest="${deployRoot}/mydir/${env}" /> 
          <chmod perm="ugo+rx"> 
           <fileset dir="${deployRoot}/mydir/${env}/web-exploded/bin"> 
            <include name="**/*.sh" /> 
            <include name="**/*.bat" /> 
           </fileset> 
          </chmod> 
         </tasks> 
        </configuration> 
        <phase>deploy</phase> 
        <goals> 
         <goal>run</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 

Trả lời

11

Trong bạn pom.xml, bạn xác định hai loại hành:

  • Một được liên kết với clean giai đoạn
  • Một thiết bị được liên kết với giai đoạn deploy. Lưu ý, bằng cách này, đối với Maven, deploy không không có nghĩa là triển khai ứng dụng (web-) của tôi trên máy chủ nhưng triển khai tạo tác trên một kho lưu trữ từ xa. Vui lòng đọc số deploy plugin information để biết thêm chi tiết.

Vì vậy, nếu bạn chạy lệnh mvn triển khai, khi vòng đời Maven đạt đến giai đoạn deploy, nó sẽ chạy thi plugin (thứ hai trong pom.xml của bạn).

Tuy nhiên, trong trường hợp của bạn, bạn có không chạy vòng đời Maven mặc định, như lệnh của bạn là mvn antrun: chạy (tôi không xem xét mục tiêu clean ở đây là nó không quan trọng cho vấn đề). Điều này có thể được dịch trong Maven thành chạy plugin antrun, với mục tiêu chạy. Vấn đề với điều đó là bạn không xác định bất kỳ cấu hình nào (có chứa các tác vụ Ant) cho cuộc gọi trực tiếp tới plugin Ant của bạn.

Vì vậy, hai giải pháp:

  • Bind thi thứ hai sang giai đoạn install, và sau đó chạy mvn clean install thay vì mvn antrun:run. Lưu ý rằng trong trường hợp này, bạn sẽ chạy toàn bộ vòng đời Maven (tức là biên soạn, kiểm tra, đóng gói).
  • Tạo cấu hình của plugin này là không liên quan đến bất kỳ việc thực thi nào. Theo quan điểm XML, chỉ cần thêm (hoặc di chuyển) khối thứ hai <configuration> là con của định nghĩa <plugin>.

Nếu bạn lựa chọn giải pháp thứ hai, bạn sẽ có một pom.xml như thế này một:

 <plugin> 
     <artifactId>maven-antrun-plugin</artifactId> 
     <version>1.6</version> 
     <!-- For cleaning --> 
     <executions> 
      <execution> 
       <id>clean</id> 
       <configuration> 
        <task> 
         <echo>Cleaning deployed website</echo> 
        </task> 
        <tasks> 
         <delete dir="${deployRoot}/mydir/${env}"/> 
        </tasks> 
       </configuration> 
       <phase>clean</phase> 
       <goals> 
        <goal>run</goal> 
       </goals> 
      </execution> 
     </executions> 
     <configuration> 
      <tasks> 
       <echo>Copying website artifact to deployment </echo> 
       ... 
      </tasks> 
     </configuration> 
    </plugin>