Maven项目源码编译

        小编菜鸟一枚,自学编程。文中有不当之处请不吝赐教。

        由于公司业务需要,要开发一款分布式运维监控平台。无从下手,便在GitHub上找了一款开源的运维监控系统——wgcloud,下载了源码,并想着在本地编译学习下。

        开发环境:IDEA,mysql5.6+,tomcat-8.5+,JDK1.8+,Maven 3.1+

        源码地址:github源码下载

        Maven项目在线情况下配置好中央仓库后十分方便。各种依赖jar包管理十分方便。但在内网中开发比较麻烦,内网私服可以下载部分的jar包,但是一些不常用的或者比较新的包就只能外网下载导入了。本文主要讲述内网中编译wgcloud源码的坑人的经历。

        源码下载之后:

        (1)  通过IDEA新建Maven Web项目

        (2)  用源码中的src文件夹、pom.xml替换新建项目的src文件夹和pom.xml。

        替换完成后,我们开始进行依赖包相关的处理了。公司内部的网站上spring相关版本与源码pom文件中的依赖包版本都不一样。想着换下版本并不影响什么,但实际确与想象的完全不一样。

        首先spring-core、spring-context、spring-web、spring-webmvc、spring-beans等相关包采用的都是4.3.12RELEASE版本以代替原文件中的4.3.17.RELEASE,部分包是在外网机上下载之后,通过install:install-file指令导入本地仓库中。完成后,mvn test测试查看是否存在问题。Build success后,启动tomcat,但是输出一直提示Fatal error  NoSuchMethodError,后续提示显示caused by org.springframework.beans.factory.xml.XmlReaderContext.getEnvironment()这种错误,查看了spring-web jar包中确实存在该类。上网查阅资料后,多数人都说是依赖冲突或者版本问题。于是把所有包都换成4.3.17.RELEASE版本的,全部通过mvn install:install-file安装到本地仓库。在此编译发现还是报错NoSuchMethodError spring包中的spelConifguration.方法(具体记不太清了)不存在。请教一些大佬之后,都说还是依赖的问题,版本有冲突。但是进行依赖分析后,依赖书很完美,没有交叉。再次停滞下来。于是果断决定放弃这种方法。

        突然想到直接把系统的war包中的依赖拷贝出来,放进项目中,再依次导入。于是在pom文件中出现了这种:


    ***
    ***
    4.3.17.RELEASE
    system
    ${project.basedir}/src/main/resources/lib/***.jar

        完成后,启动tomcat,输出提示org.slf4j.Logger找不到。而且包中确实存在该接口。于是便开始查看项目配置。发现通过以上方式导入的本地jar包并没有导入到输出的路径中。点击project structure -> artifact   将lib包中的jar包放到输出路径中,再次编译,顺利通过,项目成功启动。

        几个知识点:

        (1) 依赖冲突时,解决办法。在排除jar包中的依赖时,排除对相同包的依赖。


    
        ***
        ***
    

        (2) 引用本地jar包的方法,在上面提到过,不再赘述

        (3) mvn install:install-file使用方法

mvn install:install-file -Dfile=jar包路径 -DgroupId=*** -DartifactId=*** -Dversion=*** -Dpackaging=jar

        (4) 依赖问题测试,执行mvn test即可

        (5) 分析查看依赖继承结构,使用mvn dependency:tree,有冲突的地方可直接选中冲突的包,右键Exclude即可

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(java)