Maven 私服配置 轉


1、配置Nexus為maven的私服

第一種方式:在項目的POM中如下配置

 

<repositories>     <repository>         <id>nexus_public</id>                 <url>http://localhost:8081/nexus/content/groups/public/</url>                 <releases>                         <enabled>true</enabled>                 <releases>                 <snapshots>           <enabled>true</enabled>                 <snapshots>          </repository>   </repositories>   <pluginRepositories>       <pluginRepository>                <id>nexus_public</id>                <url>http://localhost:8081/nexus/content/groups/public/</url>                  <releases>                        <enabled>true</enabled>                  <releases>                  <snapshots>                        <enabled>true</enabled>                   </snapshots>         </pluginRepository>    </pluginRepositories>

注意:這樣的配置(第一個倉庫是代碼庫,第二個是插件庫)只對當前的Maven項目有效。實際的項目開發中,我們都想着一次配置就能讓本機的所有Maven項目都使用Maven私服,那么我們就要用到下面的方法。

 

第二種方式:在settings.xml中如下配置:

<settings> ...     <profiles>         <profile>             <id>nexus</id>             <repositories>                 <repository>                     <id>nexus_public</id>                     <url>http://localhost:8081/nexus/content/groups/public/</url>                     <releases>                         <enabled>trueenabled>                     </releases>                     <snapshots>                     <enabled>true</enabled>                 </snapshots>                 </repository>         </repositories>         <pluginRepositories>             <pluginRepository>                 <id>nexus_public</id>                 <url>http://localhost:8081/nexus/content/groups/public/</url>                 <releases>                     <enabled>true</enabled>                 </releases>                 <snapshots>                     <enabled>true</enabled>                 </snapshots>              </pluginRepository>         </pluginRepositories>     </profile> </profiles> <activeProfiles>     <activeProfile>nexus</activeProfile> </activeProfiles> ... settings>

Maven提供的profile是一組可選的配置,可以用來設置或者覆蓋配置默認值。有了profile,你就可以為不同的環境定制構建。

上面的配置中,使用了一個id為nexus的profile,這個profile包含了相關的倉庫配置,同時配置中又使用了activeProfiles元素將nexus這個profile激活,這樣當執行Maven構建的時候,激活的profile會將倉庫配置應用到項目中去。

通過上面的配置,我們會發現Maven不僅會從Nexus下載構件外還會從中央倉庫下載構件構件,為什么呢?因為超級POM文件定義了一個為central的遠程倉庫,如果這個ID沒有被覆蓋,那么請求下載構件時還可能會從central標識的遠程倉庫下載。既然是私服,那么我們就只希望Maven下載請求都僅僅通過Nexus。我們可以通過鏡像實現這一需求。可以創建一個匹配任何倉庫的鏡像,鏡像的地址是私服,這樣Maven對任何倉庫的構件下載請求都會轉到私服中。

 

 

central的意思其實是重寫了超級POM的資源庫,那么這里通過重寫導致覆蓋,重要的是,鏡像效果導致直接走鏡像,而不會去理會這些資源庫配置了,所以基本上url也失去了意義。不過對於快照和發布版本是否進行更新下載還是要靠這個配置來決定的,只有這個配置決定繼續更新時才會走鏡像下載資源,鏡像其實是像在鏡像內部尋找資源,如果沒有則會在鏡像配置的遠程倉庫下載資源到鏡像中。

 

把上面的配置修改為如下配置:

<settings> ... <mirrors>     <mirror>         <id>local_mirror</id>         <mirrorOf>*</mirrorOf>         <name>local_mirror</name>         <url>http://localhost:8081/nexus/content/groups/public/</url>     </mirror> </mirrors> <profiles>     <profile>          <id>nexus</id>         <repositories>         <repository>             <id>central</id>             <url>http://repo.maven.apache.org/maven2</url>             <releases>                 <enabled>true</enabled>             </releases>             <snapshots>                 <enabled>true</enabled>             </snapshots>         </repository>         <pluginRepositories>             <pluginRepository>                 <id>central</id>                 <url>http://repo.maven.apache.org/maven2</url>                 <releases>                     <enabled>true</enabled>                 </releases>                 <snapshots>                     <enabled>true</enabled>                 </snapshots>              </pluginRepository>         </pluginRepositories>     </profile> </profiles> <activeProfiles>     <activeProfile>nexus</activeProfile> </activeProfiles> ... </settings>

注意:以上兩種方法都是配置下載的地址,也就是說項目需要下載插件時、下載代碼時請求的地址。如果想要上傳自己的代碼,那么還需要如下配置,也就是部署構件到私服。

2、部署構件到私服

我們在實際開發過程是多個人的,那么總有一些公共模塊或者說第三方構件是無法從Maven中央庫下載的。我們需要將這些構件部署到私服上,供其他開發人員下載。用戶可以配置Maven自動部署構件至Nexus的宿主倉庫,也可以通過界面手動上傳構件。

 

 

第一種方式:使用Maven部署構件到Nexus私服上

日常開發的快照版本部署到Nexus中策略為Snapshot的宿主倉庫中,正式項目部署到策略為Release的宿主倉庫中,POM的配置方式如下(這個配置文件同樣可以寫在settings.xml文件中):

 

<distributionManagement>     <repository>         <id>local_nexus_releases</id>         <name>core Release Repository</name>         <url>http://localhost:8081/nexus/content/repositories/releases/</url>     </repository>     <snapshotRepository>         <id>local_nexus_snapshots</id>         <name>core Snapshots Repository</name>         <url>http://localhost:8081/nexus/content/repositories/snapshots/</url>     </snapshotRepository> </distributionManagement>

Nexus的倉庫對於匿名用戶只是只讀的。為了能夠部署構件,我們還需要再settings.xml中配置驗證信息(其中,驗證信息中service的id應該與POM中repository的id一致):

<servers>     <server>         <id>local_nexus_releases</id>         <username>admin</username>         <password>admin123</password>     </server>     <server>         <id>local_nexus_snapshots</id>         <username>admin</username>         <password>admin123</password> </server> </servers>

 

第二種方式:在Nexus界面上手動部署第三方構件至私服

我們除了自己的構件要部署到Nexus私服上外,我們有可能還要將第三方構件(如:SQLService的JDBC)部署到Nexus上。這個時候,在Nexus界面上選擇一個宿主倉庫(如3rd party),再在頁面下方選擇Artifact Upload選項卡。填寫對應的Maven坐標。然后點擊“Select Artifact(s) for Upload”按鈕從本機選擇要上傳的構件,然后點擊“Add Artifact”按鈕將其加入到上傳列表中。最后,單擊頁面底部的“Upload Artifact(s)”按鈕將構件上傳到倉庫中。

上傳成功之后,就可以查看結果了:

 

測試附件信息

<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <groupId>oracle.ojdbc</groupId>
  <artifactId>jdbc</artifactId>
  <version>14-10.2.0</version>
  <description>POM was created from install:install-file</description>
</project>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM