我有一个具有以下依赖结构的gradle项目:
root
+--- module1
| \--- 'some:dependency:1.0' (Maven dependency)
| \--- 'some:transitive:2.1' (transitive dep)
\--- module2
+--- module1
+--- exclude 'some:transitive:2.1'
\--- 'some:other:1.0'
\--- 'other:transitive:1.1'
configurations.all {
exclude group: 'some', module: 'transitive', version: '2.1'
}
gradle :module2:test -Dtest.single=SomeTest
-classpath ...:/path/to/jar/some/transitive/2.1/some-transitive-2.1.jar:...
java.lang.IncompatibleClassChangeError: Implementing class
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at org.glassfish.jersey.server.ResourceConfig.scanClasses(ResourceConfig.java:875)
at org.glassfish.jersey.server.ResourceConfig._getClasses(ResourceConfig.java:840)
at org.glassfish.jersey.server.ResourceConfig.getClasses(ResourceConfig.java:755)
at org.glassfish.jersey.server.ResourceConfig$RuntimeConfig.<init>(ResourceConfig.java:1171)
at org.glassfish.jersey.server.ResourceConfig$RuntimeConfig.<init>(ResourceConfig.java:1144)
at org.glassfish.jersey.server.ResourceConfig.createRuntimeConfig(ResourceConfig.java:1140)
at org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:299)
at org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:272)
at org.glassfish.jersey.test.JerseyTest.<init>(JerseyTest.java:142)
at com.mypackage.rest.SomeTest.<init>(RestServiceTest.java:19)
这是由Jersey和ASM4.1之间的不兼容性引起的(Jersey使用3.3.1,它具有不同的组id),这是从另一个模块提取的传递依赖项。
顺便说一句,我知道Idea13有更好的Gradle集成,但是(a)我们有12的许可证,而且不会很快升级整个开发团队;(b)Idea13在多语Gradle项目(Java/Scala)方面仍然存在一些问题,所以它不符合要求。
排除Maven依赖项的所有传递依赖项,但显式添加所有必需的库。除了'some:transitive:2.1'之外,我认为您可以在没有它的情况下运行代码。
group:'some', name:'dependency', version:'1.0' {
transitive = false
}
// add required transitive libraries here
另外,尝试用最新版本的Gradle运行您的原始代码。
关于maven和传递依赖排除有几个问题。然而,我不能让它工作。我的pom中有一些依赖项,它们重新打包了一些库,以减小pom的大小。到目前为止,这是成功的。但是当我运行时,这些可传递的依赖项会被写入。类路径文件。尽管它们被排除在外,如以下摘录所示。 Apache Maven 3.3.3(7994120775791599e205a5524ec3e0dfe41d4a06;2015-04-22T13:57
问题内容: 我有一个Eclipse插件项目,它取决于我在Eclipse工作区中拥有的其他项目。在“ Java Build Path”->“ Projects”选项卡下添加项目依赖项,并在“ Order and Export”中选择项目后,我得到了java.lang.NoClassDefFoundError。 我假设其他项目未正确包含在插件中。有谁知道如何解决这一问题? 谢谢,詹姆斯 问题答案: E
我有三个分级模块:ModA模块、ModB模块和ModC模块 ModA依赖于ModB和Spring Web MVC 3.2.6 ModC依赖于Spring Web MVC 4.1.5 我得到了相当多的错误,因为ModA拉进来,使用的是Spring4.1.5而不是3.2.6。由于版本差异和时间,我现在无法将ModA更新到Spring4.1.5。我想做的是将Spring4.1.5从ModA Gradle
我试图从gradle构建中排除嵌套的传递依赖项。依赖结构看起来像 org.apache.beam:beam-sdks-java-core:2.33.0-自定义 我按照gradle exclude的公认解决方案排除了依赖性,但它对我不起作用。 这不排除依赖项。当我将其更改为时,依赖项仍然没有被排除。 关于如何排除这种依赖关系的任何建议?它在旧版本中拉动。
一些stackoverflow帖子暗示我的类路径中有spring-asm的冲突版本。通过gradle依赖分析,我看到我没有spring-asm的多个版本,但我有spring-core的多个版本(版本3.1.4和5.0.2) 我试图排除3.1.4版本,但无法使其工作。我试图在依赖级别和配置级别都排除它。 即使有了上述更改,我仍然在依赖分析输出中发现Spring-Core:3.1.4.Release。
Maven插件及其在父pom中定义的依赖项,我不希望我的子pom包含该插件依赖项。 例如,如果有1个父级和100个子级,99个使用该插件并希望在一个子级中排除该插件。 我们如何才能实现这一目标?