2010-06-30 36 views
11

Tôi có một dự án bao gồm 3 thư viện khác nhau. Khi tôi chạy tập lệnh cài đặt, tất cả thư viện từ repo và chạy mvn clean install trên chúng. Nhưng phiên bản này của thư viện đã được cài đặt trong repo. Có cách nào để bỏ qua giai đoạn cài đặt nếu phiên bản trong pom.xml phiên bản bằng nhau trong repo địa phương của tôi.Làm thế nào để bỏ qua giai đoạn cài đặt trong xây dựng Maven nếu tôi đã cài đặt phiên bản này trong repo

Tôi biết rằng tôi có thể sử dụng repo cục bộ và chỉ đặt phụ thuộc. Nhưng ông chủ của tôi muốn rằng dự án của chúng tôi có thể xây dựng chỉ với repos công cộng và không có bất kỳ repos của chúng tôi.

+0

Olivier Lamy cũng được vá 'https: // jira.codehaus.org/browse/MINSTALL-73' – Cemo

Trả lời

25

Bạn có thể bỏ qua như

-Dmaven.install.skip = true

<profiles> 
    <profile> 
    <id>skipInstall</id> 
    <activation> 
     <property> 
     <name>maven.install.skip</name> 
     <value>true</value> 
     </property> 
    </activation> 
    <build> 
     <pluginManagement> 
     <plugins> 
      <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-install-plugin</artifactId> 
      <executions> 
       <execution> 
       <id>default-install</id> 
       <phase>none</phase> 
       </execution> 
      </executions> 
      </plugin> 
     </plugins> 
     </pluginManagement> 
    </build> 
    </profile> 

Tuần trước này Olivier Lamy vá jira này.

MINSTALL-73

+0

Giải pháp này không làm việc cho tôi. Tôi cũng nhận thấy rằng tệp settings.xml của maven có cảnh báo rằng phần tử là 'không được công nhận'. Tôi sẽ cung cấp giải pháp của tôi trong một câu trả lời. – Doug

1

Tôi biết rằng tôi có thể sử dụng repo cục bộ và chỉ đặt phụ thuộc. Nhưng ông chủ của tôi muốn rằng dự án của chúng tôi có thể xây dựng chỉ với repos công cộng và không có bất kỳ repos của chúng tôi.

Bạn có chắc là bạn hiểu chính xác ý của sếp? Tôi giải thích ở trên là "không cài đặt thư viện của bên thứ ba trong kho lưu trữ cục bộ của bạn, chỉ sử dụng các thư viện có sẵn trong kho công cộng". Điều này khác với "không sử dụng kho lưu trữ cục bộ của bạn" mà về cơ bản là không thể, đó không phải là cách maven hoạt động. Tôi sẽ cố làm rõ điểm này. Ngoài ra, tôi không nhận được câu hỏi mà rất khó hiểu (bạn đang nói về repo là gì? Kịch bản cài đặt đang làm gì? Tại sao bạn gọi cài đặt sạch trên thư viện? Etc).

8

plugin maven Hầu hết có thể bỏ qua bằng cách xác định một cái gì đó như:

 <plugin> 
      <artifactId>maven-install-plugin</artifactId> 
      <version>X.Y</version> 
      <configuration> 
      <skip>true</skip> 
      </configuration> 
     </plugin> 

bạn cũng có thể thiết lập xây dựng cấu hình để thiết lập các thuộc và sử dụng để xác định giá trị. ví dụ, chạy lệnh: mvn -Pexample sẽ chọn cấu hình "example". POM sau đó sẽ chứa:

... 
    <properties> 
    <skip.install>false</skip.install> 
... 
    </properties> 

... 
    <profile> 
     <id>example</id> 
     <properties> 
     <skip.install>false</skip.install> 
     </properties> 
    </profile> 
... 
    <plugin> 
     <artifactId>maven-install-plugin</artifactId> 
     <version>X.Y</version> 
     <configuration> 
     <skip>${skip.install}</skip> 
     </configuration> 
    </plugin> 
... 

Sử dụng những bổ sung POM, hành vi mặc định cho các plugin cài đặt sẽ thực hiện mục tiêu mặc định của nó, nhưng nếu hồ sơ cá nhân ví dụ được chọn, sau đó cài đặt plugin sẽ bỏ qua mục tiêu của nó.

+0

Đây là giải pháp tốt nhất. Nhưng không phải tất cả các plugin đều có "bỏ qua". – ximage

+0

Plugin cài đặt có bỏ qua cấu hình không? – Cemo

+1

'maven-install-plugin' không có tham số cấu hình' bỏ qua'. Cung cấp giải pháp về cơ bản không hoạt động chút nào. –

3

Sử dụng những gì tôi học được từ những câu trả lời khác, đây là kết quả sạch nhất đối với tôi.

Trong siêu máy tính của tôi, tôi đã thêm pluginManagement/plugin để tắt các giai đoạn cài đặt mặc định và thử mặc định khi thuộc tính deployOnly được đặt.

  <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-install-plugin</artifactId> 
       <version>2.5.2</version> 
       <executions> 
        <execution> 
         <id>default-install</id> 
         <configuration> 
          <skip>${deployOnly}</skip> 
         </configuration> 
        </execution> 
        <execution> 
         <id>default-test</id> 
         <configuration> 
          <skip>${deployOnly}</skip> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 

Vì vậy, trên dòng lệnh, tôi có thể vô hiệu hóa cài đặt và giai đoạn thử nghiệm bằng cách thêm -DdeployOnly.

mvn clean install  #build and test everything 
mvn deploy -DdeployOnly #just deploy it 
Các vấn đề liên quan