【Maven】打包补充依赖的操作记录
题外话
每次搞maven环境,总是觉得很痛苦,痛苦的根源源于,无从下手。
要说maven 有多难,自然也不能这样说,究竟也是因为没有系统地去学习,和没有把踩过的坑积累成经验,以至于每一次都踩差不多的坑,浪费相当的时间,打击相当的信心,于是觉得这是一道铜墙铁壁。
每每遇到这些环境问题,首先就觉得,这玩意很麻烦。
遇到的一些问题
1、401认证失败
这个是在maven 的 setting.xml 文件里面的 `<server>` 标签,里面的password错误了。
<!--配置服务端的一些设置。一些设置如安全证书不应该和pom.xml一起分发。这种类型的信息应该存在于构建服务器上的settings.xml文件中。 -->
<servers>
<!--服务器元素包含配置服务器时需要的信息 -->
<server>
<!--这是server的id(注意不是用户登陆的id),该id与distributionManagement中repository元素的id相匹配。 -->
<id>server001</id>
<!--鉴权用户名。鉴权用户名和鉴权密码表示服务器认证所需要的登录名和密码。 -->
<username>my_login</username>
<!--鉴权密码 。鉴权用户名和鉴权密码表示服务器认证所需要的登录名和密码。密码加密功能已被添加到2.1.0 +。详情请访问密码加密页面 -->
<password>my_password</password>
<!--鉴权时使用的私钥位置。和前两个元素类似,私钥位置和私钥密码指定了一个私钥的路径(默认是${user.home}/.ssh/id_dsa)以及如果需要的话,一个密语。将来passphrase和password元素可能会被提取到外部,但目前它们必须在settings.xml文件以纯文本的形式声明。 -->
<privateKey>${usr.home}/.ssh/id_dsa</privateKey>
<!--鉴权时使用的私钥密码。 -->
<passphrase>some_passphrase</passphrase>
<!--文件被创建时的权限。如果在部署的时候会创建一个仓库文件或者目录,这时候就可以使用权限(permission)。这两个元素合法的值是一个三位数字,其对应了unix文件系统的权限,如664,或者775。 -->
<filePermissions>664</filePermissions>
<!--目录被创建时的权限。 -->
<directoryPermissions>775</directoryPermissions>
</server>
</servers>
然后,这个server究竟在哪里用到呢?
这个server 和 代码里面的是怎样关联起来的呢?
<settings>
...
<servers>
<server>
<id>my-repo</id>
<username>your-username</username>
<password>your-password</password>
</server>
<server>
<id>my-snapshot-repo</id>
<username>your-username</username>
<password>your-password</password>
</server>
</servers>
...
</settings>
对应到 idea 的 pom.xml
在 pom.xml 文件的
<project>
...
<distributionManagement>
<repository>
<id>my-repo</id>
<url>https://example.com/repository</url>
</repository>
<snapshotRepository>
<id>my-snapshot-repo</id>
<url>https://example.com/snapshot-repository</url>
</snapshotRepository>
</distributionManagement>
...
</project>
通过这样的配置,Maven 将使用与仓库相对应的服务器配置进行身份验证,以便正确地连接和部署到相应的仓库。
2、打包的时候,缺依赖
mvn install 的时候,报错,从远程仓库拉取,拉取不下来,本地仓库又没有,于是就报错了。
然后尝试把一些jar放到maven 仓库对应路径下,
发现并不行。
改过 mvn:install 的方式,(注意这个 install 只是 install 到本地,如果是 mvn:deploy 的话,就需要指定仓库了)发现才可以
参考:maven命令 mvn install/deploy 传jar到本地/私有仓库
但有些时间,直接把jar包放上去就行,有时候又必须用
mvn install:install-file -Dfile=taobao-sdk-java-auto_1479188381469-20200406.jar -DgroupId=com.dingtalk.open -DartifactId=taobao-sdk-java -Dversion=20200406 -Dpackaging=jar
才行,也没搞懂。
这个语句是只把jar包打到本地仓库的,还有可以打到远程仓库的,就需要指定 -Durl 参数了
mvn deploy:deploy-file -Dmaven.test.skip=true -Dfile=D:\work\scan\com.kevin.skeleton\target\skeleton-1.0.jar -DgroupId=hessian -DartifactId=skeleton -Dversion=1.0 -Dpackaging=jar -DrepositoryId=releases -Durl=http://192.168.0.202:8080/nexus/content/repositories/releases
不过使用 mvn install:install-file 肯定是行得通的。
3、使用 mvn install:install-file 还是不够?
install 完成之后,发现它有一些不行(把 _remote.xxx, xxx.update 干掉之后,也还是不行)
发现那些 xx-api 的依赖,还有一个父依赖在上面,比如 order 是父pom, 它下面还有 order-api, order-common, order-service 三个子模块,它一直在报没有 order-api 的依赖,但把 order-api 依赖补充上去之后,发现,还是缺东西,那没办法,原来还需要把它的父pom的依赖也加上去即还需要把 order 这个依赖加上去(这里说的是本地maven仓库对应的 jar, xml 等)
还要把父级的依赖给引进来! 没想到,,,
还是那句吧,缺啥补啥。
弄完以上几个步骤,终于是完成了。每一次搞这些maven环境,也都很麻烦,也不知道为什么。
可能之前也没有积攒经验。
从现在开始积攒吧