如何配置maven打包jar pom配置 pom文件来解决jar包冲突

项目用maven打包后,依赖内部资源丢失的解决 - 啰嗦旻 - ITeye技术网站
博客分类:
问题
项目用maven打包后,运行时显示无法找到服务资源,而丢失的资源来自于项目所依赖的JAR包。
分析
maven打包时,将所依赖JAR包内的有用内容,按原来的包结构复制到目标包中。检查丢失的内容,物理文件存在于目标包中,判断应是配置信息丢失。
配置信息位于目标包中\META-INF\services\,内容大体是如下形式:
com.sun.jersey.core.impl.provider.entity.RenderedImageProvider
com.sun.jersey.core.impl.provider.entity.MimeMultipartProvider
com.sun.jersey.core.impl.provider.entity.FormProvider
com.sun.jersey.core.impl.provider.entity.FormMultivaluedMapProvider
com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$App
com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$Text
所丢失的内容在相应配置文件中找不到。查看所依赖的JAR包,发现多个同名配置文件出现在不同依赖包中。maven打包时进行了覆盖而不是续写,所以出现配置内容丢失问题。
解决
maven为该问题提供了Resource Transformers插件,用以指定需要续写的文件名,以防配置信息丢失。链接。
pom完整配置如下,供参考:
&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/maven-v4_0_0.xsd"&
&modelVersion&4.0.0&/modelVersion&
&groupId&com.mren&/groupId&
&artifactId&simplejerseyserver&/artifactId&
&packaging&jar&/packaging&
&version&0.0.1-SNAPSHOT&/version&
&name&jerseyserver&/name&
&properties&
&jersey-version&1.9.1&/jersey-version&
&/properties&
&dependencies&
&dependency&
&groupId&com.sun.jersey&/groupId&
&artifactId&jersey-server&/artifactId&
&version&${jersey-version}&/version&
&/dependency&
&dependency&
&groupId&com.sun.jersey&/groupId&
&artifactId&jersey-grizzly&/artifactId&
&version&${jersey-version}&/version&
&/dependency&
&dependency&
&groupId&com.sun.jersey&/groupId&
&artifactId&jersey-json&/artifactId&
&version&${jersey-version}&/version&
&/dependency&
&dependency&
&groupId&com.sun.jersey.contribs&/groupId&
&artifactId&jersey-multipart&/artifactId&
&version&${jersey-version}&/version&
&/dependency&
&dependency&
&groupId&com.sun.jersey.jersey-test-framework&/groupId&
&artifactId&jersey-test-framework-grizzly&/artifactId&
&version&${jersey-version}&/version&
&scope&test&/scope&
&/dependency&
&dependency&
&groupId&com.sun.jersey&/groupId&
&artifactId&jersey-client&/artifactId&
&version&${jersey-version}&/version&
&scope&test&/scope&
&/dependency&
&dependency&
&groupId&com.sun.grizzly&/groupId&
&artifactId&grizzly-servlet-webserver&/artifactId&
&version&1.9.18-i&/version&
&/dependency&
&dependency&
&groupId&log4j&/groupId&
&artifactId&log4j&/artifactId&
&version&1.2.16&/version&
&/dependency&
&/dependencies&
&groupId&org.apache.maven.plugins&/groupId&
&artifactId&maven-compiler-plugin&/artifactId&
&inherited&true&/inherited&
&configuration&
&source&1.6&/source&
&target&1.6&/target&
&/configuration&
&groupId&org.apache.maven.plugins&/groupId&
&artifactId&maven-shade-plugin&/artifactId&
&version&1.4&/version&
&executions&
&execution&
&phase&package&/phase&
&goal&shade&/goal&
&configuration&
&transformers&
&transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"&
&mainClass&com.mren.jerseyserver.ServerMain&/mainClass&
&/transformer&
&transformer
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"&
&resource&META-INF/services/javax.ws.rs.ext.MessageBodyWriter&/resource&
&/transformer&
&transformer
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"&
&resource&META-INF/services/javax.ws.rs.ext.MessageBodyReader&/resource&
&/transformer&
&transformer
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"&
&resource&META-INF/services/com.sun.jersey.spi.inject.InjectableProvider&/resource&
&/transformer&
&transformer
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"&
&resource&META-INF/services/com.sun.jersey.spi.HeaderDelegateProvider&/resource&
&/transformer&
&transformer
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"&
&resource&META-INF/services/com.sun.jersey.server.impl.model.method.dispatch.ResourceMethodDispatchProvider&/resource&
&/transformer&
&transformer
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"&
&resource&META-INF/services/com.sun.jersey.spi.container.ContainerProvider&/resource&
&/transformer&
&transformer
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"&
&resource&META-INF/services/com.sun.jersey.spi.container.ContainerRequestFilter&/resource&
&/transformer&
&transformer
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"&
&resource&META-INF/services/com.sun.jersey.spi.container.WebApplicationProvider&/resource&
&/transformer&
&transformer
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"&
&resource&META-INF/services/com.sun.jersey.spi.StringReaderProvider&/resource&
&/transformer&
&transformer
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"&
&resource&META-INF/services/javax.enterprise.inject.spi.Extension&/resource&
&/transformer&
&transformer
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"&
&resource&META-INF/services/javax.servlet.ServletContainerInitializer&/resource&
&/transformer&
&transformer
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"&
&resource&META-INF/services/javax.ws.rs.ext.RuntimeDelegate&/resource&
&/transformer&
&/transformers&
&/configuration&
&/execution&
&/executions&
&/plugins&
&repositories&
&repository&
&id&maven2-repository.java.net&/id&
&name&Java.net Repository for Maven&/name&
&url&http://download.java.net/maven/2/&/url&
&layout&default&/layout&
&/repository&
&repository&
&id&maven-repository.java.net&/id&
&name&Java.net Maven 1 Repository (legacy)&/name&
&url&http://download.java.net/maven/1&/url&
&layout&legacy&/layout&
&/repository&
&/repositories&
&/project&
浏览: 21939 次
来自: 上海
楼主能说的详细点吗maven项目添加jar包. - 郁闷的战士 - ITeye技术网站
博客分类:
很多新手都不知道如何在maven项目里添加jar包.
以前我还没接触maven的时候下载过一个demo,是maven项目.
我居然是照着他的pom.xml文件一个一个的写!!!
很多人认为理所当然的东西对于初学者却是一个很难迈过去的门槛.
所以简单的写下如何在maven项目中添加jar包.
根据
这篇blog,我们创建了一个基于maven的web项目.
创建后我们如何添加jar包呢?
点击pom.xml文件.我们可以看到下面有7个标签.
分别是
Overview:显示maven项目的一些基本信息.
Dependencies:添加jar包的页面,很重要!
Plugins:添加maven插件的页面.比如tomcat-maven-plugin等.
Reporting:从没用过,无视~
Dependency Hierarchy:用于显示jar包的依赖关系.没事的时候可以看看jar包的依赖关系.
Effective POM:显示maven的编译路径,plugin之类的.也可以无视.
pom.xml:导入jar包的信息,可以在其中进行修改.重要
pom.xml的基本介绍就是这样了.
现在我们添加jar包.
点击Dependencies标签页.
点击Dependencies中的add按钮
输入我们想添加的jar包名字.就会出现下图中所示.
他会把对应名称的所有版本jar包列出来.
我们先添加spring-context包
注意看红线的位置.version是这个jar包的版本号.我们可以通过修改这个version的值
进行jar包的升级.
type表示依赖包的类型.
Scope表示这个依赖包的作用周期.
这些我们暂时不理会.
保存后.如果是第一次安装maven,可能会有一段长时间的jar包下载过程.
只要第一次把jar包下载到本地后就不需要下载了.
maven默认的jar包下载地址在C盘 --&用户--&%User%--&.m2中
maven下载完jar包后.我们点开项目中的Maven Dependencies
会发现多了8个jar包.如下图
但是除了自带的junit包外我们只添加了一个spring-context包啊.
为什么会多出这些包?
多的这些包其实是和spring-context包有依赖关系的包.
maven会把和添加的jar包有依赖关系的全部下载下来.这样就避免了jar包缺失的问题了.
所以事实上我们只需要添加
spring-webmvc
spring-orm
就能获得和spring相关的14个jar包.
而这14个jar包用作一般的spring3MVC开发足够了.
浏览 98393
为啥我的点击了pom.xml下面没有那些标签呢?我用的是eclipse3.7& 要装插件.& m2eclipse你在eclipse marker里搜索下.
[u][/u][/img][/img]][/i][/u]
楼主你好,看似是老乡哦哈哈 , 请教2个问题 1.我知道我要添加如cxf-2.5.jar我应在配置文件里面怎么写?我的意思就本地文件库里面没有的,我怎么知道远程库的结构怎么写?或者怎么在远程库里面搜索我要的jar包。2.开发的时候和部署的时候仓库环境是不一样的(开发在本机,部署在服务器),像这样是不还需要在服务器装一个maven,而且要建个私服把全部jar上传提供给maven下载,否则maven就会上网下载?这样服务器不连公网咋办? 请指教谢谢1.在pom.xml中加入&properties&
&cxf.version&2.2.3&/cxf.version&
&/properties&
&dependencies&
&dependency&
&groupId&org.apache.cxf&/groupId&
&artifactId&cxf-rt-frontend-jaxws&/artifactId&
&version&${cxf.version}&/version&
&/dependency&
&dependency&
&groupId&org.apache.cxf&/groupId&
&artifactId&cxf-rt-transports-http&/artifactId&
&version&${cxf.version}&/version&
&/dependency&
&!-- Jetty is needed if you're are not using the CXFServlet --&
&dependency&
&groupId&org.apache.cxf&/groupId&
&artifactId&cxf-rt-transports-http-jetty&/artifactId&
&version&${cxf.version}&/version&
&/dependency&
&/dependencies&google搜索下就有了.2.部署的话在本地打成war包丢到服务器里就好了.
楼主写的很好,解决了我一多半的疑惑,但是我还有一点疑惑需要你的指点,比如我要用spring,但是我并不知道该用spring的那些包,比如spring-webmvc spring-orm,有没有介绍各自包的作用的地方那? 一般来说可以通过看后缀大概能够知道这个包是干什么的.比如 spring-webmvc 多半就是和spring的MVC及页面标签有关系.spring-orm和对象的映射有关系.(类似hibernate可能就必须用到这个jar包,I guess~)不过最保险的办法就是把所有的spring包都丢进去.
Jocken 写道那如果没有要添加的jar怎么办,使用maven,那么jar包都是存在 “用户/.m2/repository“ 下的,而在生成项目中是可以自动下载的,那么我再里面创建目录自己下载jar包的话 maven 能不能识别 不能的 打开repository里的文件会发现很多配置文件 这些都是maven带的索引所以自己建maven是识别不了的
那如果没有要添加的jar怎么办,使用maven,那么jar包都是存在 “用户/.m2/repository“ 下的,而在生成项目中是可以自动下载的,那么我再里面创建目录自己下载jar包的话 maven 能不能识别
浏览: 554501 次
来自: 成都
[img][i]引用[list]
[*][img][img][ ...
666 Mark !
,教程很好,循序渐进,融会贯通
按了add怎么什么反映都没有,也没有报错什么的,什么都没有,请 ...
写的不怎么详细Maven的传递性依赖及其jar包冲突解决
一、Maven简介
Maven是一个跨平台的项目管理工具。作为Apache组织的一个颇为成功的开源项目,其主要服务于基于Java平台的项目创建,依赖管理和项目信息管理。
二、Maven的依赖管理
<span style="font-family:SimS font-size:14 color:#、依赖配置
基本配置:
&dependencies&
&dependency&
&groupId&...&/groupId&
&artifactId&...&/artifactId&
&version&...&/version&
&type&...&/type&
&scope&...&/scope&
&optional&...&/optional&
&exclusions&
&exclusion&
&groupId&...&/groupId&
&artifactId&...&/artifactId&
&/exclusion&
&/exclusions&
&/dependency&
&/dependencies&
&/project&
根元素下project下的dependencies可以包含一个或者多个dependency元素,以声明一个或者多个项目依赖。每个依赖可以包含的元素有:
groupId,artifactId和version:依赖的基本坐标,对于任何一个依赖来说,基本坐标是最重要的,Maven根据坐标才能找到需要的依赖。
type:依赖的类型,对应于项目坐标定义的packaging。大部分情况下,该元素不必声明,其默认值是jar。
scope:依赖的范围,下面会进行详解。
optional:标记依赖是否可选。
exclusions:用来排除传递性依赖
大部分依赖声明只包含基本坐标
<span style="font-family:SimS font-size:14 color:#、依赖范围
Maven在编译主代码的时候需要使用一套classpath,在编译和执行测试的时候会使用另一套classpath,实际运行项目的时候,又会使用一套classpath。
依赖范围就是用来控制依赖与这三种classpath(编译classpath、测试classpath、运行classpath)的关系,Maven有以下几种依赖范围:
compile:编译依赖范围。如果没有指定,就会默认使用该依赖范围。使用此依赖范围的Maven依赖,对于编译、测试、运行三种classpath都有效。典型的例子是spring-core,在编译,测试和运行的时候都需要使用该依赖。
provided:已提供依赖范围。使用此依赖范围的Maven依赖,对于编译和测试classpath有效,但在运行时无效。典型的例子是servlet-api,编译和测试项目的时候需要该依赖,但在运行项目的时候,由于容器已经提供,就不需要Maven重复地引入一遍。
test:测试依赖范围。使用此依赖范围的Maven依赖,只对于测试classpath有效,在编译主代码或者运行项目的使用时将无法使用此类依赖。典型的例子就是JUnit,它只有在编译测试代码及运行测试的时候才需要。
runtime:运行时依赖范围。使用此依赖范围的Maven依赖,对于测试和运行classpath有效,但在编译主代码时无效。典型的例子是JDBC驱动实现,项目主代码的编译只需要JDK提供的JDBC接口,只有在执行测试或者运行项目的时候才需要实现上述接口的具体JDBC驱动。
system:系统依赖范围。该依赖范围与provided所表示的依赖范围一致,对于编译和测试classpath有效,但在运行时无效。只是使用system范围依赖时必须通过systemPath元素显式地指定依赖文件的路径。由于此类依赖不是通过Maven仓库解析的,而且往往与本机系统绑定,可能造成构建的不可移植,因此应该谨慎使用,systemPath元素可以引用环境变量。
<span style="font-family:SimS font-size:14 color:#、传递性依赖
传递性依赖是在maven2中添加的新特征,这个特征的作用就是你不需要考虑你依赖的库文件所需要依赖的库文件,能够将依赖模块的依赖自动的引入。例如我们依赖于spring的库文件,但是spring本身也有依赖,如果没有传递性依赖那就需要我们了解spring项目依赖,自己添加到我们的项目中。有了传递性依赖机制,在使用Spring Framework的时候就不用去考虑它依赖了什么,也不用担心引入多余的依赖。Maven会解析各个直接依赖的POM,将那些必要的间接依赖,以传递性依赖的形式引入到当前的项目中。
例如:项目中用到spring-core,而它又依赖commons-logging,从其构件POM 中可以看出
&?xml version="1.0" encoding="UTF-8"?&
-&project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" 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.springframework&/groupId&
&artifactId&spring-core&/artifactId&
&version&4.3.2.RELEASE&/version&
&name&Spring Core&/name&
&description&Spring Core&/description&
&url&/spring-projects/spring-framework&/url&
-&organization&
&name&Spring IO&/name&
&url&http://projects.spring.io/spring-framework&/url&
&/organization&
-&licenses&
-&license&
&name&The Apache Software License, Version 2.0&/name&
&url&http://www.apache.org/licenses/LICENSE-2.0.txt&/url&
&distribution&repo&/distribution&
&/license&
&/licenses&
-&developers&
-&developer&
&id&jhoeller&/id&
&name&Juergen Hoeller&/name&
&email&jhoeller@pivotal.io&/email&
&/developer&
&/developers&
&connection&scm:git:git:///spring-projects/spring-framework&/connection&
&developerConnection&scm:git:git:///spring-projects/spring-framework&/developerConnection&
&url&/spring-projects/spring-framework&/url&
-&issueManagement&
&system&Jira&/system&
&url&https://jira.springsource.org/browse/SPR&/url&
&/issueManagement&
-&dependencies&
-&dependency&
&groupId&commons-codec&/groupId&
&artifactId&commons-codec&/artifactId&
&version&1.10&/version&
&scope&compile&/scope&
&optional&true&/optional&
&/dependency&
-&dependency&
&groupId&commons-logging&/groupId&
&artifactId&commons-logging&/artifactId&
&version&1.2&/version&
&scope&compile&/scope&
&/dependency&
-&dependency&
&groupId&log4j&/groupId&
&artifactId&log4j&/artifactId&
&version&1.2.17&/version&
&scope&compile&/scope&
&optional&true&/optional&
&/dependency&
-&dependency&
&groupId&net.sf.jopt-simple&/groupId&
&artifactId&jopt-simple&/artifactId&
&version&5.0.2&/version&
&scope&compile&/scope&
&optional&true&/optional&
&/dependency&
-&dependency&
&groupId&org.aspectj&/groupId&
&artifactId&aspectjweaver&/artifactId&
&version&1.8.9&/version&
&scope&compile&/scope&
&optional&true&/optional&
&/dependency&
&/dependencies&
&/project&
可以看出还依赖了其他构建。Maven就是根据次POM文件获得它的依赖的,从而实现传递性依赖。
假设A依赖于B,B依赖于C,我们说A对于B是第一直接依赖,B对C是第二直接依赖,A对于C是传递性依赖。第一直接依赖的范围和第二直接依赖的范围决定了传递性依赖的范围。
最左边一行表示第一直接依赖范围,最上面一行表示第二直接依赖范围,中间的交叉单元格则表示传递性依赖范围。
仔细观察上面表格,我们发现这样的规律:
当第二直接依赖的范围是compile的时候,传递性依赖的范围与第一直接依赖的范围一致;
当第二直接依赖的范围是test的时候,依赖不会得以传递;
当第二直接依赖的范围是provided的时候,只传递第一直接依赖的范围也为provided的依赖,切传递性依赖的范围同样为provided;
当第二直接依赖的范围是runtime的时候,传递性依赖的范围与第一直接依赖的范围一致,但compile例外,此时传递性依赖的范围为runtime。
<span style="font-family:SimS font-size:14 color:#、maven对传递性依赖的处理
有些依赖,maven会对其按照下述原理自动处理
<span style="font-family:SimS font-size:14 color:#).短路优先:谁离得最近就使用谁的依赖jar包
C到达A为C-&B-&A
C到达B为C-&B
A中的 commons-io的版本为2.4
B中的commons-io的版本为2.0
C中依赖于B,B依赖于A
则C的junit的包为2.0版本
因为依赖的短路优先
<span style="font-family:SimS font-size:14 color:#).如果两条路都是一样长的时候呢?
C到达A为C-&A
C到达B为C-&B
则看pom文件中依赖的两个工程谁在前面就是用哪个版本
这里使用的common-io为2.4版本
&dependency&
&groupId&org.lonecloud.A&/groupId&
&artifactId&A&/artifactId&
&version&0.0.1-SNAPSHOT&/version&
&/dependency&
&!--C依赖于B但是会将A的依赖传递进来 --&
&dependency&
&groupId&org.lonecloud.B&/groupId&
&artifactId&B&/artifactId&
&version&0.0.1-SNAPSHOT&/version&
&!-- 此标签的作用是可以将B的传递依赖关系A不传递给C --&
&!-- &exclusions& &exclusion& &groupId&org.lonecloud.A&/groupId& &artifactId&A&/artifactId&
&/exclusion& &/exclusions& --&
&/dependency&
C文件中添加了A和B的依赖项的时候谁最先加载则使用谁的jar包
下面使用的是2.0的版本,也就是B中的jar包
&dependency&
&groupId&org.lonecloud.B&/groupId&
&artifactId&B&/artifactId&
&version&0.0.1-SNAPSHOT&/version&
&!-- 此标签的作用是可以将B的传递依赖关系A不传递给C --&
&!-- &exclusions& &exclusion& &groupId&org.lonecloud.A&/groupId& &artifactId&A&/artifactId&
&/exclusion& &/exclusions& --&
&/dependency&
&dependency&
&groupId&org.lonecloud.A&/groupId&
&artifactId&A&/artifactId&
&version&0.0.1-SNAPSHOT&/version&
&/dependency&
三、Maven依赖jar包冲突解决
<span style="font-family:SimS font-size:14 color:#、判断jar是否正确的被引用
<span style="font-family:SimS font-size:14 color:#)、在项目启动时加上VM参数:-verbose:class
项目启动的时候会把所有加载的jar都打印出来 类似如下的信息:
classpath加载的jar
具体load的类
我们可以通过上面的信息查找对应的jar是否正确的被依赖,具体类加载情况,同时可以看到版本号,确定是否由于依赖冲突造成的jar引用不正确;
<span style="font-family:SimS font-size:14 color:#)、 通过maven自带的工具:??mvn dependency:tree
具体后面可以加 -Dverbose 参数 ,详细参数可以去自己搜,这里不详细介绍。
比如分析如下POM
运行: mvn dependency:tree -Dverbose
通过里面的信息可以看到 两个jar都commons-logging存在依赖,但是版本不同。里面的详细信息显示引用了 commons-logging:commons-logging:jar:1.1 去掉了commons-logging:commons-logging:jar:1.0.3 (omitted for duplicate)。
<span style="font-family:SimS font-size:14 color:#)、在Myeclipse或者idea或者eclipse中用pom编辑器打开一个pom文件,在Dependency Hierarchy的Tab页中,就可以查看当前pom文件中显示声明的jar包,及这些显示声明的jar中隐式引入的依赖jar包。
这样就可以查看有哪些隐式的依赖jar会导致jar包冲突了。
通过以上方法我们可以看到项目中引用jar版本号;接下来就是如何排除掉我们不想要版本的
<span style="font-family:SimS font-size:14 color:#、冲突的解决
<span style="font-size:14 color:#)在pom.xml中引用的包中加入exclusion,排除依赖
&dependency&
&groupId&com.alibaba&/groupId&
&artifactId&dubbo&/artifactId&
&version&2.5.3&/version&
&exclusions&
&exclusion&
&artifactId&spring&/artifactId&
&groupId&org.springframework&/groupId&
&/exclusion&
&/exclusions&
&/dependency&
去除全部依赖
&dependency&
&groupId&com.alibaba&/groupId&
&artifactId&dubbo&/artifactId&
&version&2.5.3&/version&
&exclusions&
&exclusion&
&artifactId&*&/artifactId&
&groupId&*&/groupId&
&/exclusion&
&/exclusions&
&/dependency&
<span style="font-family:SimS font-size:14 color:#)在ide中右击进行处理,处理完后在pom.xml中也会添加exclusion元素
本文转载自 honghailiang888的专栏 , 原文链接: , 转载请保留本声明!
每一个你不满意的现在,都有一个你没有努力的曾经。
Copyright (C) &&
&&Powered by&java(26)
在一次的maven项目中遇到这样一个bug:
& & 编译器没有报什么错,但无法编译,或者能编译,项目启动不了。后来我才发现是以下的问题:
&&& 项目中的pom文件中,依赖了webx3.core,而webx3.core又隐式依赖了fasttext相关的jar包,同时我在pom中也引人了fasttext.all,
& fasttext.all也隐式依赖了fasttext相关的jar包,两类jar包版本还不一样,这样就导致了jar包冲突的问题,牵扯到的pom文件依赖如下:
&dependency&
&groupId&com.alibaba.platform.shared&/groupId&
&artifactId&webx3.core&/artifactId&
&/dependency&
&dependency&
&groupId&com.alibaba.platform.shared&/groupId&
&artifactId&fasttext.all&/artifactId&
&/dependency&
那怎么查看这种jar包冲突问题呢?
eclipse提供了对隐式依赖jar包的查看功能:在eclipse中打开一个pom文件,在Dependency
Hierarchy的Tab页中,就可以查看当前pom文件中显示声明的jar包,及这些显示声明的jar中隐式引入的依赖jar包,我在这里搜索fasttext,就可以清楚的看到了,一个依赖了1.3.5版本的,一个依赖了1.3-SNAPSHOT版本的。
& & 发现了问题就简单了,只要通过排除webx3.core中的fasttext的依赖,就解决了上述冲突的问题:
&dependency&
&groupId&com.alibaba.platform.shared&/groupId&
&artifactId&webx3.core&/artifactId&
&exclusions&
&exclusion&
&artifactId&mons.codec&/artifactId&
&groupId&com.alibaba.external&/groupId&
&/exclusion&
&exclusion&
&groupId&com.alibaba.platform.shared&/groupId&
&artifactId&fasttext-css&/artifactId&
&/exclusion&
&exclusion&
&groupId&com.alibaba.platform.shared&/groupId&
&artifactId&fasttext-psoriasis&/artifactId&
&/exclusion&
&exclusion&
&groupId&com.alibaba.platform.shared&/groupId&
&artifactId&fasttext-sec&/artifactId&
&/exclusion&
&exclusion&
&groupId&com.alibaba.platform.shared&/groupId&
&artifactId&fasttext-segment&/artifactId&
&/exclusion&
&/exclusions&
&/dependency&
对应排除,改bug是个挺实用的方法。
&&相关文章推荐
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:33051次
排名:千里之外
原创:27篇
评论:25条
(2)(4)(1)(4)(2)(1)(5)(2)(13)}

我要回帖

更多关于 maven pom 本地jar 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信