maven依赖包和依赖仓库(1)

由于启蒙是C++,对C++的编译和Visual Studio等C++的图形界面较熟悉。但是,也仅仅是小工程,类似于图书馆管理系统等,没有大工程的实践经验。自己对Java编程没有一点经验,对Maven、Gradle、Intellij IDEA也没有接触过。但是,由于要修改一个Java大程序的一些代码,在遇到问题的时候,我也通过google搜索解决了问题。但终究是基础不牢,不成系统,导致这次花了不少时间解决一个问题。

上一次的问题是:如何将第三方依赖库打包到jar文件中,并且可以在多个平台上运行。

这次的问题是:需要修改mvn网站的一个依赖包,项目运用修改后的依赖包。这个问题,看着和上次的问题差不多,解决方案如下:可以把这个修改后的依赖包作为第三方依赖包,放在程序的repo路径下,然后编译,将此依赖包打包到jar文件中。为了避免编译时,自动到mvn网站下载未修改的依赖包,我把version修改为还没有发布的version,这样就在mvn网站下载不下来了。其次,我还尝试过修改groupid,但是失败,因为依赖包在打包的时候,已经说明了groupid,即“package com.**.**.",如果修改了groupid,则编译出错。

然而,编译通过后,执行出问题了“java.lang.NoClassDefFoundError: org/apache/logging/log4j/LogManager”。因为,修改的依赖包需要依赖其他依赖包,但是这些依赖包不能自动下载。因此,我继续在上面修改。修改方法如下:将需要的那些依赖包全部下载到repo文件夹中,然后,在所有包含已修改依赖包的dependency的pom.xml文件中,添加这些依赖包的dependency。编译后通过,并将这些依赖包打包在了jar文件中,执行也通过。

但是,又遇到另外一个问题。因为,需要对比依赖包修改前后的区别。所以,我把mvn网站的未修改的依赖包也下载下来,通过修改version和上述方法,编译通过,执行通过。但是,当编译和执行修改后的依赖包的时候,未按照计划执行。后面,发现是local repository的问题。因为两次编译的version未修改,当第一次编译的时候,mvn将该依赖包复制到了local repository。当第二次编译的时候,mvn直接从local repository找依赖包,而不是在程序的repo文件下寻找。导致两次编译使用相同的依赖包。解决方案:修改version编号。并且查看编译后的local repository是否有两个版本的依赖包,默认的local repository的目录是:~/.m2/repository/。

上面的方法全是野路子,全是因为对mvn和mvn repository不熟悉造成的。下面几篇文章给出一些我的认识。过完这阵子,还是打印一个maven的手册过来,认真学习吧。

原文地址:https://www.cnblogs.com/xingzifei/p/7426222.html