问题描述
一些研究:
Define an artifact to be used as a dependency in another project
Gradle Composite Build,transitive dependency is not resolved
我刚刚开始使用gradle,所以有很多我不太了解:
最小示例
所以我的项目结构如下:
+ GradleTest // this is the main project,ideally it will only depend on calculator
| -- + calculator // calculator will depend on square as a composite build
| -- build.gradle
| -- settings.gradle
+ square // this project does not depend on anything (I can build this one without a problem)
| -- build.gradle
| -- settings.gradle
| -- build.gradle
| -- settings.gradle
和 .gradle 文件:
GradleTest / build.gradle
buildscript {
version = '0.3.0'
ext {
main_group = 'org.gradler'
}
}
plugins {
id 'java'
}
group "${main_group}"
repositories {
mavenCentral()
flatDir {
dirs 'libs'
}
}
dependencies {
implementation name: 'calculator'
}
jar {
group = "${main_group}"
from configurations.compileClasspath.collect {
println ("Zipping compile class path: ${it.getName()}")
it.isDirectory() ? it : zipTree(it)
}
manifest {
println("Packing jar file: ${archiveFile.get()}")
println("Packing jar file: group: ${getGroup()} | version: ${archiveVersion.get()}")
attributes(
'Class-Path': configurations.compileClasspath.collect {
println ("Collecting compile class path: ${it.getName()}")
it.getName()
}.join(' '),'Main-Class': "${getGroup()}.Main"
)
}
}
GradleTest / settings.gradle
rootProject.name = 'GradleTest'
include 'calculator'
GradleTest / calculator / build.gradle
buildscript {
version = '0.2.0'
ext {
main_group = 'org.mathics'
}
}
plugins {
id 'java'
}
group "${main_group}"
repositories {
mavenCentral()
flatDir {
dirs 'libs'
}
}
dependencies {
implementation name: 'square'
}
jar {
group = "${main_group}"
from configurations.compileClasspath.collect {
println ("Zipping compile class path: ${it.getName()}")
it.isDirectory() ? it : zipTree(it)
}
manifest {
println("Packing jar file: ${archiveFile.get()}")
println("Packing jar file: group: ${getGroup()} | version: ${archiveVersion.get()}")
attributes(
'Class-Path': configurations.compileClasspath.collect {
println ("Collecting compile class path: ${it.getName()}")
it.getName()
}.join(' '),'Main-Class': "${getGroup()}.Main"
)
copy {
from "${archiveFile.get()}"
into '../libs/'
rename "calculator-${archiveVersion.get()}.jar","calculator.jar"
}
}
}
GradleTest / calculator / settings.gradle
rootProject.name = 'calculator'
includeBuild('../square')
GradleTest / square / build.gradle
buildscript {
version = '0.1.0'
ext {
main_group = 'org.equations'
}
}
plugins {
id 'java'
}
group "${main_group}"
jar {
group = "${main_group}"
manifest {
println("Packing jar file: ${archiveFile.get()}")
println("Packing jar file: group: ${getGroup()} | version: ${archiveVersion.get()}")
attributes(
'Class-Path': configurations.compileClasspath.collect { it.getName() }.join(' '),'Main-Class': "${getGroup()}.Main"
)
copy {
from "${archiveFile.get()}"
into '../calculator/libs/'
rename "square-${archiveVersion.get()}.jar","square.jar"
}
}
}
GradleTest / square / settings.gradle
rootProject.name = 'square'
到目前为止我尝试过的事情:
自然地,我尝试从头开始构建项目,然后一切正常:
- 建立正方形->创建jar文件->将其复制到计算器的 libs文件夹
- 构建计算器->因为现在可以在 libs 中找到 square.jar ,它也可以构建(,但是如果我尝试直接构建计算器,则不会! )->将Calculator.jar复制到顶部的 libs 文件夹
- 现在我也可以构建主项目了。
我意识到这种方法几乎不理想,因为我多次构建 .jar 文件并复制它们,但是我真的没有主意。
对于如何使这项工作变得更好,我将保持开放态度。
但是这里的主要目标是,对于初学者,我主要想要两个独立的 gradle 项目,其中一个依赖于另一个。说,我希望项目 B 和 C ,而 B 依赖于 C 。 此外,应该有一个同时依赖于这两个“父”项目,或者,因为 B 依赖于 C ,所以对于“父”项目来说就足够了 A 仅依赖于 B 。
任何帮助表示赞赏!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)