maven多模块,父项目pom发布到maven私服
如果项目是基于一个父项目(pom依赖),下面多个子module进行构建的项目,发布到maven私服的时候往往会出现相互依赖的问题。通常情况下需要每个项目都单独的进行maven私服上传而不是关系性上传所有。特别是针对父pom的上传,不能因为上次父pom依赖,而将所有的项目都上传到私服。
针对这种问题,该如何解决呢?下面来逐步解答。先看看多模块项目的结构:
如果直接执行maven clean deploy进行子项目的发布,会出现如下错误:
主要原因是子项目进行发布时需要下载父项目的pom依赖。
如果此时直接针对父项目执行上述命令,又会将所有的子项目给发布到私服上。
解决方案一
此时就需要采用maven的-N参数,如下命令进行发布:
mvn clean package deploy -Dmaven.test.skip=true -Drepository:snapshots -N
上述命令在父项目的根目录下进行执行,即可将父项目的pom发布到私服上。
mvn参数-N –non-recursive Do not recurse into sub-projects,意思是,不递归到子项目(子模块)。
一个父项目下Father面有3个子项目A、B、C,都生成jar包,则有Father.jar、A.jar、B.jar、C.jar;此时A项目依赖了B、C项目,如果使用mvn clean install -N,则只会把Father.jar安装到本地仓库(~/.m2/repository),而不会安装其他三个包。
解决方案二
通过 maven-deploy-plugin 插件的参数来控制:
<properties> <maven.deploy.skip>true</maven.deploy.skip> </properties>
哪个项目不需要发布就加上这个属性,即可。但这种方案不具备第一种方案的灵活性。需要不停的修改该配置。
解决方案三
只用deploy命令不会把父模块的引用关系一起发布。使用“deploy -pl 模块名 -am”命令代替单纯的deploy命令。
解决方案四
maven-source-plugin相关配置。多模块项目和普通一个项目的配置是有区别的,需要在每个需要上传源码的子模块中都配置maven-source-plugin才可以上传:
非多模块项目:
<plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <version>3.0.1</version> <configuration> <attach>true</attach> </configuration> <executions> <execution> <phase>compile</phase> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin> </plugins>
多模块项目,在父pom中增加:
<pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <version>3.0.1</version> <configuration> <attach>true</attach> </configuration> <executions> <execution> <phase>compile</phase> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin> </plugins> </pluginManagement>
子项目中增加:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> </plugin> </plugins> </build>
然后使用:mvn deploy 既可将源码上传到私服中
关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台
除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接