Maven发布deploy jar到本地仓库/远程仓库/FTP等
2016年06月30日


一、无源码,直接以文件的形式发布jar包(deploy-file)


情况一:前提,有项目的pom文件(如果没有pom文件,可以从jar包中提取出来),自动出pom文件读取groupId等信息

(如果没有pom文件,可以看下面的情况二)


我已经写成了标准脚本,并经常使用,分享出来:

1、deploy-jar.bat

@echo off

echo "=== start to deploy jar... ==="

call mvn deploy:3.0.0-M1:deploy-file -X ^
    -Durl=file:///D:/0sync-local/git/repository ^
    -DrepositoryId=git-repo ^
    -Dfile=./apollo-client-0.10.3-SNAPSHOT.jar ^
    -DpomFile=./apollo-client-0.10.3-SNAPSHOT.pom ^
    -Dsources=./apollo-client-0.10.3-SNAPSHOT-sources.jar
::    -Djavadoc=./apollo-client-0.10.3-SNAPSHOT-javadoc.jar

echo "=== deploy jar finished ... ==="

pause

如果是远程仓库的话,将上面的url替换成远程仓库地址即可,例如

-Durl=http://10.2.10.22:8081/nexus/content/repositories/releases/

注意 pomFile 虽然也是可选,但是建议加上,否则无法自动识别依赖包,需要手动添加依赖。


2、deploy-pom.bat

@echo off
echo "=== start to deploy pom... ==="

call mvn deploy:deploy-file -X ^
    -Durl=file:///D:/0sync-local/git/repository ^
    -DrepositoryId=git-repo ^
    -Dfile=./apollo-0.10.3-SNAPSHOT.pom ^
    -DpomFile=./apollo-0.10.3-SNAPSHOT.pom ^
    -Dpackaging=pom

echo "=== deploy pom finished ... ==="

pause


具体用法可以参见官方文档:

http://maven.apache.org/plugins/maven-deploy-plugin/deploy-file-mojo.html

http://maven.apache.org/plugins/maven-deploy-plugin/examples/deploying-sources-javadoc.html



情况二:有无pom文件都可以,手动指定groupId等信息

deploy-jar.bat

@echo off
:: ****************************************************************************
:: Title :  deploy jar to maven repositories                                                      
::                                                                            
:: Usage :  根据需要自己修改                                                                      
::                                                                            
:: Notes :                      
::   1. 参数pomFile、sources、javadoc为可选,但是建议都有
::   2. 区分SNAPSHOT版本和RELEASE版本,repository和url不一样
::   3. 参见官方文档:http://maven.apache.org/plugins/maven-deploy-plugin/deploy-file-mojo.html
::   4. 建议使用 deploy-jar-func-version.bat ,更加方便。                                                
::                                                                 
:: Requires: Maven > mvn                                                       
::                                                                            
:: Returns:  
::                                                                            *
:: Author:   Zollty Tsou                                                      *
:: Version:  1.0.0                                                            *
:: Date:     03/05/2016                                                       *
:: Link:     https://github.com/zollty/tool-libs                              *
:: ****************************************************************************

echo "=== Start to deploy jars... ==="

set   releasesRepoId=pre-nexus-releases
set  releasesRepoUrl=http://10.2.10.22:8081/nexus/content/repositories/releases/

set  snapshotsRepoId=pre-nexus-snapshots
set snapshotsRepoUrl=http://10.2.10.22:8081/nexus/content/repositories/snapshots/

set base_dir=C:/Users/zollty/lib

call mvn deploy:deploy-file ^
-DartifactId=api-base ^
-Dversion=1.1 ^
-DgroupId=org.zollty ^
-Dfile=%base_dir%/api-base-1.1.jar ^
-DpomFile=%base_dir%/pom.xml ^
-Dsources=%base_dir%/api-base-1.1-sources.jar ^
-Djavadoc=%base_dir%/api-base-1.1-javadoc.jar ^
-DrepositoryId=%releasesRepoId% -Durl=%releasesRepoUrl%

call mvn deploy:deploy-file ^
-DartifactId=jretty-log ^
-Dversion=1.2-SNAPSHOT ^
-DgroupId=org.jretty ^
-Dfile=C:/Users/zollty/jretty-log-1.2-SNAPSHOT.jar ^
-DpomFile=%base_dir%/pom.xml ^
-Dsources=%base_dir%/jretty-log-1.2-SNAPSHOT-sources.jar ^
-Djavadoc=%base_dir%/jretty-log-1.2-SNAPSHOT-javadoc.jar ^
-DrepositoryId=%snapshotsRepoId% -Durl=%snapshotsRepoUrl%


echo "=== deploy jars finished ... ==="

pause


二、以源码的方式打包并发布

方法1:配置如下pom.xml,然后直接运行 mvn deploy

<distributionManagement>
  <repository>
    <id>git-repo</id>
    <url>file:///D:/0sync-local/git/repository</url>
  </repository>
</distributionManagement>

方法2:不配置xml,直接在命令行配置仓库地址,如下:

mvn deploy -DaltDeploymentRepository=my-git-repo::default::file:///D:/0sync-local/git/repository

同上,如果是远程仓库的话,将上面的url替换成远程仓库地址即可,例如

-Durl=http://10.2.10.22:8081/nexus/content/repositories/releases/


三、如果要通过ssh或者ftp发布

只需要将上面的“file://”协议改一下,并引入额外的maven插件即可。

参见官方文档:http://maven.apache.org/plugins/maven-deploy-plugin/examples/deploy-ftp.html



四、利用git或者其他http服务搭建maven远程仓库

上面已经说了如何将jar包发布到本地目录,只需要把文件同步到git仓库即可。然后在pom.xml配置git仓库地址即可,例如:

<repositories>
  <repository>
    <id>zollty-git-repo</id>
    <url>https://raw.githubusercontent.com/zollty/maven-repo/master</url>
  </repository>
</repositories>

还可以,建一个snapshots、releases的分支来分别存放snapshots、releases类型的jar包。

推荐这种用法,例如:

<repositories>
  <repository>
     <id>git-maven-repo-snapshots</id>
     <url>https://gitee.com/maven-repo/repository/raw/snapshots</url>
  </repository>
  <repository>
     <id>git-maven-repo-releases</id>
     <url>https://gitee.com/maven-repo/repository/raw/releases</url>
  </repository>
</repositories>