在公司里开发项目,有时需要单独开发一个jar包供 项目使用,需要发布到 远程maven仓库,这样方便下载,以nexus仓库为例。
1、本地 setting.xml 修改
nexus 仓库 可以上传jar包的是 maven-releases 和 maven-snapshots, maven-public 是 maven-releases和 maven-snapshots的聚合,是不能发布的。
Maven 会根据 jar 的版本号是否带 -SNAPSHOT 判断是 上传到 snapshots 或 release,
如果你要上传到 maven-releases,把版本号改成 1.0.0 这样的就好了。
maven-snapshots 可以重复以相同版本号发布,重复发布内容会进行覆盖。
maven-release一旦发布,不能再以相同版本号覆盖(会报错),只能进入管理页面手动删除,再进行发布。
<servers> <server> <id>nexus</id> <username>uname</username> <password>pass</password> </server> <server> <id>nexus-releases</id> <username>uname</username> <password>pass</password> </server> <server> <id>nexus-snapshots</id> <username>uname</username> <password>pass</password> </server> </servers>
2、项目 pom.xml 文件配置 deploy 时的远程仓库
<distributionManagement> <repository> <id>nexus-releases</id> <name>Nexus Release Repository</name> <url>http://nexus.demo.com/repository/maven-releases/</url> </repository> <snapshotRepository> <id>nexus-snapshots</id> <name>Nexus Snapshot Repository</name> <url>http://nexus.demo.com/repository/maven-snapshots/</url> </snapshotRepository> </distributionManagement>
3、打包并上传到远程仓库
mvn clean deploy -Dmaven.test.skip=true
如果你要把源代码也上传到仓库,方便使用者能在idea中点进源码,在项目pom文件中加上打包源码的插件
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.0</version> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <executions> <execution> <id>attach-sources</id> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
4、其他
手动上传 jar包文件到远程仓库
mvn deploy:deploy-file -DgroupId=com.demo.demo-project \ -DartifactId=demo \ -Dversion=1.0.0-SNAPSHOT \ -Dpackaging=jar \ -Dfile="D:\code\demo-project\target\demo-1.0.0-SNAPSHOT.jar" \ -DrepositoryId=nexus \ -Durl=http://nexus.demo.com/repository/maven-snapshots/
在多模块项目中只编译某个子模块和依赖的父模块(反应堆)
# 在 项目根 目录下 mvn clean package -pl sub-module-name -am -DskipTests=true # -am 代表只编译 -pl 列出的子模块和其依赖