maven eclipse插件抽风的手工解决

(edit by king) 最近重新开始搞java源代码的分析工具,其中用到了eclipse的jdt来直接分析java源代码。用maven添加了org.eclipse.jdt.core包之后,发现代码写完之后不能运行,有一些依赖无法找到。搜索了下貌似是因为从maven中央仓库下载的jdt和其依赖包都有小版本号,导致maven的依赖管理找不到这写包了(都不知道为什么能够下载下来,却不能加入到依赖中)。具体情况的描述,和这里的相同。

    找了半天,发现maven的eclipse有个很强大的功能,就是把eclipse目录中的插件都安装到maven的本地仓库,先用这个方法解决了maven依赖找不到的情况,具体命令如下:

 

Bash代码
  1. mvn eclipse:make-artifacts -DstripQualifier=true -DeclipseDir=PATH_TO_ECLIPSE  

 

 同这样的方法,把jdt3.6(eclipse helios使用的)安装到了本地,然后在工程的pom.xml中改成这个依赖,其中的 -DstripQualifier=true 就是为了在安装到本地仓库的时候去处后面 v 开头的小版本号。

    用了这个方法,在命令行中已经可以用mvn命令进行打包了,但是又发现了一个问题,在eclipse中调试的时候,eclipse中的maven插件,虽然用了本地安装的jdt core,但后面的依赖解析仍然用的是带小版本号的jar包,还自动去maven官方的远程仓库里面进行了下载。但是,悲剧的事情是这些jar包没有通过数字验证(应该不会是下载出错),在执行的时候,会抛出java.lang.SecurityException: Invalid signature file digest for Manifest main attributes这样的异常。在命令行里面用:jarsigner -verify xxx.jar

进行了验证,果然都是无法不能通过验证的,而本地安装的jar包验证都是通过的。先用最简单的方法,就是用本地的不带小版本号的jar包替换,但是这样在eclipse中执行还是有问题,最后查了下maven的dependency插件,利用这个插件的拷贝依赖的功能才手工解决了这个问题。过程如下:

  1. 在工程目录下再建立一个lib文件夹
  2. 使用:mvn dependency:copy-dependencies -DoutputDirectory=lib 命令将所有的依赖复制到lib目录中
  3. 在eclipse中,将maven管理的依赖全部删除,手工添加lib目录中的所有jar包

    通过这个过程可以发现,直接使用mvn命令复制出来的jar包,都是本地安装的无小版本号的,说明eclipse中的maven插件还是有点问题的。

 

    当然,如果紧紧是想执行工程中的main方法,也可以使用:mvn dependency:build-classpath,将当前依赖的jar包所在的目录全部列出来,然后使用java命令将刚才的这些jar包设置为classpath就可以了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值