gpt4 book ai didi

java - 子项目之间的 Gradle 依赖关系

转载 作者:行者123 更新时间:2023-12-02 02:11:05 33 4
gpt4 key购买 nike

我正在尝试找出在 gradle 中声明项目依赖项的正确方法,我有这两个子项目:

一个java应用程序

apply plugin: 'java'

sourceSets {main {java {srcDirs = ['./']}}}
dependencies{compile project(':p2')}

jar {manifest.attributes(
'Class-Path': configurations.runtime.files.collect { it.name }.join(''),
'Main-Class': 'Main'
)
}

和一个java库:

apply plugin: 'java-library'

sourceSets {main {java {srcDirs = ['./']}}
}

jar {
manifest.attributes(
'Class-Path': configurations.runtime.files.collect { it.name }.join(' ')
)
}

根项目为空,设置仅包含子项目。

p1 项目中的依赖项仅告诉 p2 必须在 p1 之前构建,但是将 p2 配置为 p1 的库怎么样?现在如果运行 p1 我得到:线程“main”中的异常 java.lang.NoClassDefFoundError: StaticClass

Gradle 构建没问题:

C:\...>gradle build
BUILD SUCCESSFUL in 1s
4 actionable tasks: 4 up-to-date

我必须将 p2.jar 复制并粘贴到 p1.jar 目录才能正常运行,我怎样才能让 gradle 为我做这件事?

最佳答案

如果您尝试将 p2 中的类打包到 p1 jar 中,请尝试将其添加到 p1 的 build.gradle 中:

jar {
from project(':p2:').sourceSets.main.output
}

不过,这有点不寻常。通常,如果您设置了单独的库项目,则将其打包在单独的 jar 中并将其添加到依赖项目的类路径中,以便可以重用。

在 jar list 上设置类路径不会按照您编写的方式工作。 Manifest 属性将每个条目解释为相对于 JVM 工作目录的文件路径,但您只需为其提供每个 jar 的名称,而 Gradle 不会。设置配置类路径时不要复制或移动文件。依赖 list 来设置类路径通常不是一个好主意,因为只有当您的 jar 完全按照 list 所期望的方式排列在文件系统上时,它才会起作用。如果这确实是您想要的,那么您需要设置一个“安装”目录,其中包含按预期排列的所有必需 jar。 Gradle Application Plugin也许可以帮助您实现此目标或同等目标,但我从未使用过它。

关于java - 子项目之间的 Gradle 依赖关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50022606/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com