jar包冲突多为传递性依赖的管理不当给项目带来的麻烦解决思路罗列如下:
1、首先查看当前项目的jar关系如果使用eclipse、idea等编辑器可打开pom.xml文档底部有Dependency Hierarchy可供查看jar的依赖情况。第二种使用maven插件的方式使用命令行:
mvn dependency:tree
结果中重要的是两个部分,首先是Used undeclared dependencies意值项目中使用到的,但是没有显示声明的依赖。这种依赖意味着潜在的风险。他是通过其他直接依赖导入的传递性依赖,当直接依赖升级时相关依赖的版本也会变化。可能导致当前项目报错,且不易察觉。另一个部分是Unused declared dependencies意指项目中未使用的,但显式声明的依赖。需要注意的是我们不应该直接删除了事而是应该仔细分析。因为这个命令行发现不了执行测试和运行时需要的依赖。
以上方法都可可完整的查看当前项目的jar情况,个人更喜欢使用命令行。
2、通过以上方法我们可以看到项目中引用jar版本号;接下来就是如何排除掉我们不想要版本的jar语法如下:
<dependency>
<groupId>.....</grooupId>
<artifactId>....</artifactId>
<version>...</version>
<exclusions>
<exclusion>
<groupId>.....</groupId>
<artifactId>.....</artifactId>
</exclusion>
</exclesions>
<dependency>
<!--exclusions可包含一个或多个exclusion元素-->
3、一下规避jar冲突的思路,如果项目中有直接用到某个jar而这个jar已通过传递依赖的方式引入到maven项目里了。最好排除这个传递依赖在pom里面明确的声明这个依赖。归类依赖,不断的优化依赖如,去除多余的依赖。
第一步:将IKAnalyzer.jar包存放在一个文件夹中,比如mylib文件夹第二步:建一个IKAnalyzer.jar包相关的pom.xml文件,需要在pom.xml中定义其maven坐标及其相应的依赖代码即可,同样将pom文件存放在上述jar文件同一文件夹下,IKAnalyzer.jar坐标及依赖代码如下:
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.wltea.ik-analyzer</groupId>
<artifactId>ik-analyzer</artifactId>
<version>3.2.8</version>
<name>IK Analyzer 3</name>
<description>A dictionary and grammar-based Chinese segmenter</description>
<dependencies>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-core</artifactId>
<version>3.0.3</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-core</artifactId>
<version>1.4.1</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-analyzers</artifactId>
<version>3.0.3</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-smartcn</artifactId>
<version>3.0.3</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
第三步:打开CMD,进入到mylib文件夹,运行下面命令
mvn install:install-file \
-Dfile=IKAnalyzer3.2.8.jar \
-DgroupId=org.wltea.ik-analyzer\
-DartifactId=ik-analyzer \
-Dversion=3.2.8\
-Dpackaging=jar
这样你就可以将IKAnalyzer3.2.8.jar安装到您Maven本地的库文件夹相应目录中。你可以根据你需要安装包的实际情况修改上面的几个参数的设定值即可。之后你可以在pom.xml文件中通过以下依赖在项目中引入上述的包,如下:
<dependency>
<groupId>org.wltea.ik-analyzer</groupId>
<artifactId>ik-analyzer</artifactId>
<version>3.2.8</version>
</dependency>
当然你也可以不将IKAnalyzer3.2.8.jar发布到您本地的Maven库中,而是通过下面配置引入,效果和上面的差不多:
<dependency>
<groupId>org.wltea</groupId>
<artifactId>IKAnalyzer</artifactId>
<version>3.2.8</version>
<systemPath>C:\Users\yangping\Desktop\a\IKAnalyzer3.2.8.jar</systemPath>
</dependency>
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)