gpt4 book ai didi

java - Gradle同步任务不一致

转载 作者:行者123 更新时间:2023-12-03 06:14:12 24 4
gpt4 key购买 nike

我试图将Java项目的依赖项复制到lib文件夹,然后从复制到Class-Path文件夹的jar列表中生成manifest.mflib属性的值。

这是build.gradle文件-

apply plugin: 'java'
apply plugin: 'eclipse'

sourceCompatibility = 1.8

repositories {
mavenCentral()
}

libsDirName = 'package'

ext {
libDir = file('build/dependencies/lib')
}

task syncDependencies(type: Sync) {
from configurations.runtime
into libDir
}

jar {
manifest {
attributes(
"Class-Path": libDir.listFiles().collect { 'lib/' + it.getName() }.join(' ')
)
}
}

jar.dependsOn syncDependencies

dependencies {
//external compile dependencies
compile 'org.eclipse.persistence:javax.persistence:2.1.0'
}

当我执行 gradle clean jar时,它将依赖项复制到 lib文件夹,但是 Class-Path属性的值为空白。如果我再次执行 gradle clean jar,它将为 Class-Path属性生成正确的值。

但是,如果我先执行 gradle clean,再执行 gradle clean jar,则 Class-Path的值再次为空。

我正在使用 Gradle 2.6

最佳答案

首次执行Class-Pathgradle clean jar属性保持为空的原因是您混合了build lifecycle phases

在配置项目时评估libDir.listFiles().collect { 'lib/' + it.getName() }.join(' '),而在执行项目时由lib任务填充syncDependencies目录。

为了正确设置Class-Path属性,可以在配置阶段执行以下操作:

jar {
manifest {
attributes(
"Class-Path": configurations.runtime.collect { "lib/$it.name" }.join(' ')
)
}
}

或者,仍可以在执行阶段执行以下操作:
jar {
doFirst {
manifest {
attributes(
"Class-Path": libDir.listFiles().collect { 'lib/' + it.getName() }.join(' ')
)
}
}
}

关于java - Gradle同步任务不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32174002/

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