Nexus Repository上传Jar的坑

在本次做系统升级的过程中遇到了一些坑,代码拉下来后,jenkins编译不通过。

报错大概为:

package lombok does not exist

IDE里面需要安装lombok插件,但是对于jenkins编译来说,本身与lombok没有关系才对。maven配置里面应该都包含了编译所需的依赖。(在开发商的本地开发环境都可以编译成功)

按照网上资料处理:添加依赖和plugin

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.8</version>
</dependency>
<plugin>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok-maven-plugin</artifactId>
    <version>1.16.18.1</version>
    <executions>
        <execution>
            <phase>generate-sources</phase>
            <goals>
                <goal>delombok</goal>
            </goals>
        </execution>
    </executions>
</plugin>

不再报lombok的错误,但是仍然有异常:

package cn.hutool.core.bean does not exist

这就很奇怪了,hutool是项目依赖的jar包,说明该jar包没有被正常使用。但是明明该jar包在pom里面有配置(在一个依赖的framework的jar包里面依赖的,这个就是导致该坑的地方),而且framework应该也被成功下载了(如果没有找到该包,也会提示无法找到framework jar)。

改成本地IDEA里面进行build,看看是否有问题。结果IDEA里面pom中的依赖(之前手动上传到nexus repository的jar包)一直异常,无法正常下载。

难道是通过nexus repository页面手动上传jar包有问题?于是尝试通过命令行的方式进行上传jar包:

mvn deploy:deploy-file -DgroupId=xxx -DartifactId=yyy -Dversion=1.1.0 -Dpackaging=jar -Dfile=./zzz.jar  -Durl=http://xxxx -DrepositoryId=kkk

成功上传后,重新reload maven依赖包,一切正常。build一下,竟然还是报错,提示一些类无法找到(本地提示的是org.springframework.data.*找不到),这就更奇怪了为啥会出现依赖包找不到的情况。

这时好奇是不是该依赖包就没有在pom里面配置呢?打开maven dependency analyzer查看依赖树,果然并没有所需要的jar包依赖。说明pom依赖配置有问题,可是开发商为啥又是能正常build呢。于是决定查看一下repository里面手动上传的jar包文件与其他的jar包文件有啥区别,结果点进去查看xxx.pom文件后,发现里面竟然只有很简单的内容:

<modelVersion>4.0.0</modelVersion>
<groupId>com.xxx</groupId>
<artifactId>xxxx</artifactId>
<version>1.0</version>

明显有问题啊,该framework包应该有不少依赖才对。说明上传过程中,自动生成的pom文件内容有问题,没有把依赖的内容加进去。查询资料,deploy命令中指定pom文件,然后重新上传:

mvn deploy:deploy-file -DgroupId=xxxxx -DartifactId=yyyyy  -Dversion=1.1.0 -Dpackaging=jar -Dfile=./zzzz.jar  -Durl=http://xxxx -DrepositoryId=kkkk -DgeneratePom=true -DpomFile=./pom.xml

通过pomFile指定了pom文件后,上传的jar一切正常,重新本地打包,顺利通过。再在jenkins上执行构建,一切顺利。

说明1:

根因就是对于maven repository上传jar时自动生成的pom文件只是一个minimal的pom内容,没有依赖信息。如果需要保留dependency信息,需要手动指定pom.xml

java - When should generatePom for maven deploy-file be set to false? - Stack Overflowhttps://stackoverflow.com/questions/37813589/when-should-generatepom-for-maven-deploy-file-be-set-to-false

https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.htmlicon-default.png?t=N5K3https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html

另外,对于单纯上传一个Pom文件(通常是作为parent pom来使用),也使用类似的命令:

mvn deploy:deploy-file -Dfile=./xxxx.pom -DgroupId=yyy  -DartifactId=zzzz -DrepositoryId=hhh -Durl=http://xxxx/ -Dversion=1.1.1

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

金融码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值