Maven私服搭建(Nexus Repository Manager 3)


下載和安裝

下載地址:https://help.sonatype.com/repomanager3/download

注意:Nexus Repository Manager 3是一個Java服務器應用程序,安裝需要 jdk1.8以上的版本。

下載解壓后,用命令行到解壓目錄的bin目錄下運行 nexus.exe /run(Linux運行./nexus run),啟動完成后會顯示“Started Sonatype Nexus”:

-------------------------------------------------

Started Sonatype Nexus OSS 3.16.2-01

-------------------------------------------------

訪問Nexus管理后台

Nexus管理后台地址:http://localhost:8081/
點擊右上角Sign in登錄,默認賬號和密碼為:admin/admin123

在Repositories 倉庫管理界面中有多種默認的倉庫,也可以添加新的倉庫,本實例直接使用默認的倉庫:
maven-central,Type為proxy,表示代理倉庫。代理倉庫用來代理遠程倉庫(maven-central代理的是超級POM中配置的Maven中央倉庫),當在下載組件時,如果代理倉庫搜索不到,則會把請求轉發到遠程倉庫從遠程倉庫下載。從遠程倉庫下載后會緩存到代理倉庫,下次還有該組件的請求則會直接到代理倉庫下載,不會再次請求遠程倉庫。

maven-releases/maven-snapshots,Type為hosted,表示為宿主倉庫。宿主倉庫主要用來部署團隊內部使用的內部組件,默認的maven-releases和maven-snapshots分別用來部署團隊內部的發布版本組件和快照版本組件。

配置代理倉庫

配置settings.xml:

<settings>
   <!-- 配置鏡像,此處攔截所有遠程倉庫的請求到代理倉庫-->
  <mirrors>
    <mirror>
      <id>nexus</id>
      <mirrorOf>*</mirrorOf>
      <url>http://localhost:8081/repository/maven-central/</url>
    </mirror>
  </mirrors>
  <!-- 配置遠程庫和遠程插件庫-->
  <profiles>
    <profile>
      <id>nexus</id>
      <!-- Maven用於填充構建系統本地存儲庫的遠程倉庫集合-->
      <repositories>
        <repository>
          <id>central</id>
          <url>http://central</url>
          <releases><enabled>true</enabled></releases>
          <snapshots><enabled>true</enabled></snapshots>
        </repository>
      </repositories>
     <!-- 類似於repositories元素,指定Maven可以在哪里找到Maven插件的遠程倉庫位置-->
     <pluginRepositories>
        <pluginRepository>
          <id>central</id>
          <url>http://central</url>
          <releases><enabled>true</enabled></releases>
          <snapshots><enabled>true</enabled></snapshots>
        </pluginRepository>
      </pluginRepositories>
    </profile>
  </profiles>
  <!-- 激活profiles配置 -->
  <activeProfiles>
    <activeProfile>nexus</activeProfile>
  </activeProfiles>
</settings>

創建Maven項目,pom.xml如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.nocoffee</groupId>
  <artifactId>coffee-api</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>coffee-api</name>
  <url>http://maven.apache.org</url>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

執行mvn clean,執行mvn clean需要下載maven-clean-plugin插件,通過Browse界面可以看到因為執行mvn clean而下載的maven-clean-plugin.jar:

注意:如果界面為空,表示沒有下載,原因是之前下載過該插件到本地倉庫,需要把本地倉庫的maven-clean-plugin插件刪除,我的本地倉庫路徑為D:\Reporsitory,所以需要刪掉文件夾:D:\Reporsitory\org\apache\maven\plugins\maven-clean-plugin,然后重新構建即可。

配置宿主倉庫

settings.xml增加如下配置:

<servers>
     <server>
        <id>nexus</id>
        <username>admin</username>
        <password>admin123</password>
    </server>
</servers>

配置pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.nocoffee</groupId>
  <artifactId>coffee-api</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>coffee-api</name>
  <url>http://maven.apache.org</url>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
  
  <distributionManagement>
		<repository>
		<id>nexus</id>
		<name>maven-releases</name>
		<url>http://localhost:8081/repository/maven-releases/</url>
		</repository>
		<snapshotRepository>
		<id>nexus</id>
		<name>maven-snapshots</name>
		<url>http://localhost:8081/repository/maven-snapshots/</url>
		</snapshotRepository>
   </distributionManagement>
</project>

執行mvn clean deploy將項目打包並發布到宿主倉庫,構建成功后到Browse中maven-snapshots庫查看(因為項目版本為0.0.1-SNAPSHOT,是帶SNAPSHOT的快照版本):

maven-releases庫

需要將項目版本改成發布版本,在pom.xml中 0.0.1-SNAPSHOT 去掉-SNAPSHOT,改為 0.0.1 。重新執行mvn clean deploy:

注意:maven-releases庫默認不能重新發布,需要可重新發布則需要修改該倉庫配置。
測試重新發布到maven-releases庫,執行mvn clean deploy將會構建失敗:

[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4.112 s
[INFO] Finished at: 2019-06-10T16:34:29+08:00
[INFO] Final Memory: 18M/164M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy (default-deploy) on project coffee-api: Failed to deploy artifacts: Could not transfer artifact com.nocoffee:coffee-api:jar:0.0.1 from/to nexus (http://localhost:8081/repository/maven-releases/): Failed to transfer file: http://localhost:8081/repository/maven-releases/com/nocoffee/coffee-api/0.0.1/coffee-api-0.0.1.jar. Return code is: 400, ReasonPhrase: Repository does not allow updating assets: maven-releases. -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

將maven-releases庫中Deployment pollcy改為Allow redeploy既可:


免責聲明!

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



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