maven打包发布及搭建私服
最近熟悉了下maven打包发布及搭建私服的过程,记录下此次操作过程。
事前准备
首先新建两个项目springMVC和yacolWebApp,springMVC提供facade接口,yacolWebApp为客户端应用
打包过程
在本地是先打包springMVC项目 mvn clean package,默认打包成jar包,
再执行mvn clean install命令,则在/Users/shen/.m2/repository/cn/shen/service-facade/1.0-SNAPSHOT路径下就会出现相应的jar包,然后在别的需要引用其facade接口的项目yacolwebapp中添加pom引用:
<dependency>
<groupId>cn.shen</groupId>
<artifactId>service-facade</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
则可以引用到相应的facade。
搭建私服
可以参照如下文章:https://blog.csdn.net/tanga842428/article/details/71249067
发布项目到私服
参照文章:https://blog.csdn.net/zhenzhen823/article/details/81628602
需要配置私服地址,现上传本地搭建的私服,配置如下:
<distributionManagement>
<repository>
<id>deployRelease</id>
<url>http://localhost:8081/nexus/content/repositories/releases</url>
<uniqueVersion>true</uniqueVersion>
</repository>
<snapshotRepository>
<id>deploySnapshot</id>
<url>http://localhost:8081/nexus/content/repositories/snapshots</url>
<uniqueVersion>true</uniqueVersion>
</snapshotRepository>
</distributionManagement>
此过程中并没有修改setting.xml中的地址,只是修改了项目pom文件的地址信息,因为用户名和密码均是默认密码所以不需要做相应的修改
注意在实际需要将修改的模块发布到私服是使用deploy;
但是使用过程中会报错,比如报401。需要1.保持setting.xml中server标签的id取名需要和pom中的保持一致,2.账户和密码正确。
注意需要安装相应的插件,配置如下(版本应该有关系):
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
上传之后即可在私服上查看到响应的项目
遇到的问题
./nexus start 注意启动时出错,./nexus console 能看到出错信息,遇到过jdk版本的问题,切换一下jdk版本即可(1.8->1.7)
jdk切换步骤(前提是安装过多版本的jdk)
打开编辑open ~/.bash_profile
修改export JAVA_HOME=$(/usr/libexec/java_home -v 1.8) 为export JAVA_HOME=$(/usr/libexec/java_home -v 1.7)
保存 source ~/.bash_profile
定义<groupId>cn.shen</groupId>和<artifactId>appdomainservice</artifactId>包的名称时一定要注意重名的问题,一定要注意区分,否则项目名称一样的就会冲突,如springMVC和YacolAppWeb两个项目的<groupId>名都是cn.shen,这会把两个项目的子moudle都搞在一起,这样如果两个项目都用到了domainservice的moudle则会冲突,只能把子moudle的名称做区分。那么就好像是一个项目,所以不同项目之间的groupId一定要不一样