2012-10-11 37 views
8

Tôi có một dự án sử dụng kho lưu trữ nội bộ và kho lưu trữ trung tâm. Có cách nào tôi có thể cấu hình các settings.xml như vậy mà tôi có thể sử dụng cả hai thay vì chỉ là một? Khi tôi thêmSử dụng nhiều kho lưu trữ trong Maven

<mirrors> 
    <mirror> 
     <id>MY ID</id> 
     <url>MY URL</url> 
     <mirrorOf>*</mirrorOf> 
    </mirror> 
</mirrors> 

trong settings.xml, tôi có thể nhìn vào kho lưu trữ nội bộ của riêng tôi nhưng nó sẽ ghi đè các kho trung tâm.

Tôi chắc chắn đây là sự cố thường gặp phải đối với những người mới sử dụng Maven.

Trả lời

8

Có một số cách để thực hiện việc này.

Tốt nhất, IMO, là để máy chủ lưu trữ cục bộ hoạt động như một proxy cho Maven Central. Cả Nexus và Artifactory đều làm điều này. Nếu bạn đang sử dụng Apache hoặc một máy chủ web khác, bạn nên chuyển đổi.

Bạn cũng có thể cập nhật cài đặt của bạn loại trừ máy chủ mục tiêu từ gương của bạn:

<mirrorOf>*,!MyOtherRepository</mirrorOf> 

này hoạt động nếu bạn có nhiều máy chủ kho địa phương, nhưng tôi không nghĩ rằng bạn có thể loại trừ trung tâm theo cách này: theo mặc định, Maven tìm kiếm các tạo tác ở trung tâm và máy chủ của bạn đóng vai trò như một trình duyệt cho nó.

Điều này để lại các mục nhập kho lưu trữ rõ ràng trong POMS của bạn, tham chiếu đến kho lưu trữ cục bộ. Nếu kho lưu trữ cục bộ của bạn chỉ phục vụ các tạo phẩm của bạn, đây có thể là điều đơn giản thứ hai cần làm (đặc biệt là nếu bạn sử dụng một POM cha giữ đặc tả kho lưu trữ).

+0

Không, tôi thực sự có một kho lưu trữ từ xa phục vụ một số đồ tạo tác của người khác.Tôi cần cài đặt s.t. maven kiểm tra kết quả từ cả trung tâm và kho lưu trữ từ xa đó. –

+0

Một lần nữa, cách dễ nhất để làm điều này là một máy chủ lưu trữ cục bộ hoạt động như một proxy. Tôi nghĩ rằng bạn đang mắc kẹt với các mục '' rõ ràng trong POM (cha mẹ) của bạn. – parsifal

4

Chỉ thị gương của bạn hiện đang phản chiếu mọi thứ. Bạn có thể loại trừ các kho lưu trữ được đặt tên như vậy:

<mirrorOf>!myExcludedRepo,*</mirrorOf> 

Gương trên mọi thứ ngoại trừ kho lưu trữ có tên myExcludedRepo.

Đây là Maven guide for mirroring. Lưu ý đặc biệt là phần được đánh dấu Nâng cao. Có rất nhiều khả năng ở đó.

0

Tôi tìm thấy một câu trả lời làm việc, mà là để thay đổi pom.xml thay vào đó và thêm kho từ xa một cách nhanh chóng, theo hướng dẫn của this link

Cảm ơn câu trả lời, folks, và tôi muốn thừa nhận đề xuất của bạn có thể hữu ích cho các kịch bản phức tạp hơn với nhiều kho lưu trữ và cấu hình phức tạp hơn.

+0

Vâng, rất vui vì bạn đã tìm thấy nó, mặc dù "Mà để lại các mục trong kho lưu trữ rõ ràng trong POMS của bạn" có vẻ khá rõ ràng với tôi. – parsifal

+0

Tốt. Tôi sẽ chấp nhận câu trả lời của bạn sau đó :) (mặc dù liên kết đó cung cấp giải pháp mức thấp). –

0

Tôi sử dụng ba repos (sử dụng Nexus), cái đầu tiên là kho lưu trữ Proxy mà tôi thêm tất cả các kho lưu trữ bên ngoài. Hai phần còn lại là kho lưu trữ nội bộ của tôi để triển khai các bản phát hành và ảnh chụp nhanh. Dưới đây là .m2 tôi/settings.xml:

<settings xmlns="http://maven.apache.org/SETTINGS/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.1.0 http://maven.apache.org/xsd/settings-1.1.0.xsd"> 
    <!-- http://maven.apache.org/ref/3.0.4/maven-settings/settings.html --> 

    <interactiveMode>true</interactiveMode> 
    <offline>false</offline> 

    <mirrors> 
    <mirror> 
     <id>nexus</id> 
     <mirrorOf>external:*</mirrorOf> 
     <url>http://localhost:3129/nexus/content/groups/public</url> 
    </mirror> 
    </mirrors> 

    <profiles> 
    <profile> 
     <id>nexus</id> 
     <repositories> 
      <repository> 
       <id>central</id> 
       <url>http://central</url> 
       <releases> 
        <enabled>true</enabled> 
       </releases> 
       <snapshots> 
        <enabled>true</enabled> 
       </snapshots> 
      </repository> 

      <repository> 
       <id>internal.releases</id> 
       <url>http://localhost:3129/nexus/content/repositories/releases</url> 
       <releases> 
        <enabled>true</enabled> 
       </releases> 
       <snapshots> 
        <enabled>false</enabled> 
       </snapshots> 
      </repository>   

      <repository> 
       <id>internal.snapshots</id> 
       <url>http://localhost:3129/nexus/content/repositories/snapshots</url> 
       <releases> 
        <enabled>false</enabled> 
       </releases> 
       <snapshots> 
        <enabled>true</enabled> 
       </snapshots> 
      </repository>   
     </repositories> 

     <pluginRepositories> 
      <pluginRepository> 
       <id>central</id> 
       <url>http://central</url> 
       <releases> 
        <enabled>true</enabled> 
       </releases> 
       <snapshots> 
        <enabled>true</enabled> 
       </snapshots> 
      </pluginRepository> 
     </pluginRepositories> 
     <properties> 
      <downloadSources>true</downloadSources> 
      <downloadJavadocs>true</downloadJavadocs>   
     </properties> 
    </profile> 
    </profiles> 

    <activeProfiles> 
    <activeProfile>nexus</activeProfile> 
    </activeProfiles> 

    <servers> 
    <server> 
     <id>internal.releases</id> 
     <username>admin</username> 
     <password>XXX</password> 
    </server> 
    <server> 
     <id>internal.snapshots</id> 
     <username>admin</username> 
     <password>XXX</password> 
    </server> 
    </servers> 

</settings> 

Maven sử dụng tất cả chúng, vì vậy bạn có thể muốn sử dụng tính năng định tuyến của Nexus để chặn "^/my/private/gói /.*" vì vậy nó không cố gắng tìm nạp các gói nội bộ từ các kho lưu trữ bên ngoài. Tôi chưa thêm repos nội bộ vào repo proxy.

Bạn không cần phải điều chỉnh tệp pom.xml của mình để hoạt động. Chỉ cần nhập "mvn deploy".

Các vấn đề liên quan