当前位置: 首页 > 知识库问答 >
问题:

从运行时配置中排除的实现依赖项

谈旺
2023-03-14

当在我的gradle文件中添加依赖项作为实现时,它们在作为运行时配置的一部分列出时不会被包括在内。例如,当试图将它们放入pathing jar时,它们被排除在外,如下所示:

task pathingJar(type: Jar) {
    dependsOn configurations.runtime
    appendix = 'pathing'

    doFirst {
        manifest {
            attributes "Class-Path": configurations.runtime.files.collect {
                it.toURL().toString().replaceFirst(/file:\/+/, '/')
            }.join(' ')
        }
    }
}

但是,当将这些作为编译依赖项移回时,这是有效的。现在的问题是在编译时,我的类路径要大得多。我的理解是,实现应该被视为直接使用者中的编译时和传递性的运行时,那么为什么它们被排除在配置之外呢?当将它们指定为“API”时,这也不起作用。这是使用梯度5.6.1。

共有1个答案

慎芷阳
2023-03-14

不推荐使用runtime配置,并将其替换为runtimeonly。这个旧的配置不知道新的实现API配置,所以这就是为什么在解析它时看不到依赖项。

您所希望的不是解析runtimeonly配置,而是解析运行时使用的类路径。此配置称为runtimeClasspath。示例:

tasks.register("patchingJar", Jar) {
    dependsOn configurations.runtimeClasspath
    appendix = 'patching'

    doFirst {
        manifest {
            attributes "Class-Path": configurations.runtimeClasspath.files.collect {
                it.toURL().toString().replaceFirst(/file:\/+/, '/')
            }.join(' ')
        }
    }
}
 类似资料:
  • 是否有一种方法可以使用Gradle从一组中排除特定的jar?我尝试了下面的代码,但这删除了该组的所有jar

  • 我有一个项目需要依赖于iText 5.5.2和iText 2.1.7(Primefaces在运行时需要这个特定的版本,由于许可证问题,无法使用iText 5)。 所以我在pom.xml中有以下内容: 问题是,我不希望我们的开发人员能够从iText 2.1.7(com.lowagie.*包)导入类。我想强制他们使用iText 5.5.2(com.itextpdf.*包)中的类。 是否有方法将其从构建

  • 问题内容: 我有一个项目,该项目依赖于由供应商控制的工件。该工件包含一些我依赖的类,其中一些类较旧并且会引起问题。有没有办法让Maven自动扩展jar,删除类并将它们重新打包为依赖项?我会举一个例子。 所以- 我需要使用在项目网站,但我需要使用从神器。我无法修改Supplier:artifact或us:dependency。 有任何想法吗?! 问题答案: 从版本2.0.9开始,maven保留了类路

  • 我只想排除中的一些jar 我的配置是(根据https://maven.apache.org/plugins/maven-dependency-plugin/list-mojo.html) : 然后我就跑 但依赖项仍然出现在文件中。

  • 我想使用第三方供应商的jar。但是在这个jar中,我有Java包的旧版本我需要找到一些方法将包从主项目中排除。像这样的东西: 你能推荐一些解决方案吗?