IntelliJ 混淆了 Gradle 依赖与不同的项目 - 仍然有效
IntelliJ confuses Gradle dependency with different project - still works
情况:我在 IntelliJ idea 中导入了两个单独的 Gradle 项目。这两个项目都使用一个名为 Mason 的框架。项目A是最先导入的,没有问题,它使用较新版本的Mason,它存储在本地一个名为'lib'的文件夹中,作为Mason。20.jar(Mason的none这里使用的版本在 Maven Central 上)。项目 B 是后来导入的,使用的是较旧的版本,该版本存储在文件夹中,也称为 'lib',如 Mason.19.jar(某些元素与 Mason.20 不兼容)。这两个项目的结构相同,并且都将库文件夹设置为“Root/lib/”,但除此之外,这两个项目完全相互独立,甚至不相互引用。
实际问题:IntelliJ 现在在评估项目 B 时遇到问题,因为它在“ProjectB/lib/Mason.20.jar”中寻找“Mason.20.jar”,即使它不是在项目 B 的 build.gradle 文件中的任何位置引用。而且项目本身也完全没问题,我可以 运行 Gradle 任务没有任何问题,在 IntelliJ 内外。这个问题也是在我最近设置笔记本电脑后才出现的。
我尝试了 IntelliJ 中的 Gradle 同步按钮并检查依赖项是否搞砸了,但找不到任何东西。我猜 IntelliJ 只是混淆了两个项目的缓存,但我不知道如何解决这个问题。
这是我用来为项目 B 生成 jar 文件的 Gradle 任务,也是错误所在:
task distribute(type: Jar){
from sourceSets.main.output
from (configurations.compile.collect {zipTree(it)}){ <--this is where IntelliJ complains
exclude 'META-INF/MANIFEST.MF'
exclude 'META-INF/*.SF'
exclude 'META-INF/*.DSA'
exclude 'META-INF/*.RSA'
}
manifest {
attributes 'Main-Class': project.mainClassName
}
doLast{
copy {
from "/build/libs/"
from "./logging.properties"
into "./jar"
}
copy {
from "./parameters"
into "./jar/parameters"
}
copy{
from "./README.txt"
into "./jar"
}
copy{
from "./batch/"
into "./jar/batch"
}
file(new File(projectDir, "/build")).deleteDir()
file(new File(projectDir, "/jar/batch/linux/buildJar")).delete()
file(new File(projectDir, "/jar/batch/windows/buildJar.bat")).delete()
}
}
为了比较,项目 A 的等效 Gradle 任务:
task distribute(type: Jar){
outputs.upToDateWhen { false }
from sourceSets.main.output
from (configurations.compile.collect {zipTree(it)}){
exclude 'META-INF/MANIFEST.MF'
exclude 'META-INF/*.SF'
exclude 'META-INF/*.DSA'
exclude 'META-INF/*.RSA'
}
manifest {
attributes 'Main-Class': project.mainClassName
}
doLast {
copy {
from "/build/libs/"
into "./jar"
}
copy {
from "./Config"
into "./jar/Config"
}
copy{
from "./README.txt"
into "./jar"
}
copy {
from "./scriptfiles"
into "./jar/scriptfiles"
}
file(new File(projectDir, "/build")).deleteDir()
}
}
有什么解决办法吗?
经过一番尝试,我或多或少找到了解决方案。
看来 IntelliJ 可能不是问题所在,而是 Gradle 本身。
在我手动删除位于 %USERPROFILE%\.gradle\caches
下的 Gradle 缓存之后
问题消失了,即使我在 IntelliJ 中切换回项目 A(没有重新导入它也没有构建它)它仍然工作正常。但是我不知道如果我重新导入一个项目它会如何表现。需要注意的一件事是项目 A 使用了问题库的较新版本,因此首先使用较旧的库导入项目可能更可靠。它也可能只是一个随机的一次性错误。
情况:我在 IntelliJ idea 中导入了两个单独的 Gradle 项目。这两个项目都使用一个名为 Mason 的框架。项目A是最先导入的,没有问题,它使用较新版本的Mason,它存储在本地一个名为'lib'的文件夹中,作为Mason。20.jar(Mason的none这里使用的版本在 Maven Central 上)。项目 B 是后来导入的,使用的是较旧的版本,该版本存储在文件夹中,也称为 'lib',如 Mason.19.jar(某些元素与 Mason.20 不兼容)。这两个项目的结构相同,并且都将库文件夹设置为“Root/lib/”,但除此之外,这两个项目完全相互独立,甚至不相互引用。
实际问题:IntelliJ 现在在评估项目 B 时遇到问题,因为它在“ProjectB/lib/Mason.20.jar”中寻找“Mason.20.jar”,即使它不是在项目 B 的 build.gradle 文件中的任何位置引用。而且项目本身也完全没问题,我可以 运行 Gradle 任务没有任何问题,在 IntelliJ 内外。这个问题也是在我最近设置笔记本电脑后才出现的。
我尝试了 IntelliJ 中的 Gradle 同步按钮并检查依赖项是否搞砸了,但找不到任何东西。我猜 IntelliJ 只是混淆了两个项目的缓存,但我不知道如何解决这个问题。
这是我用来为项目 B 生成 jar 文件的 Gradle 任务,也是错误所在:
task distribute(type: Jar){
from sourceSets.main.output
from (configurations.compile.collect {zipTree(it)}){ <--this is where IntelliJ complains
exclude 'META-INF/MANIFEST.MF'
exclude 'META-INF/*.SF'
exclude 'META-INF/*.DSA'
exclude 'META-INF/*.RSA'
}
manifest {
attributes 'Main-Class': project.mainClassName
}
doLast{
copy {
from "/build/libs/"
from "./logging.properties"
into "./jar"
}
copy {
from "./parameters"
into "./jar/parameters"
}
copy{
from "./README.txt"
into "./jar"
}
copy{
from "./batch/"
into "./jar/batch"
}
file(new File(projectDir, "/build")).deleteDir()
file(new File(projectDir, "/jar/batch/linux/buildJar")).delete()
file(new File(projectDir, "/jar/batch/windows/buildJar.bat")).delete()
}
}
为了比较,项目 A 的等效 Gradle 任务:
task distribute(type: Jar){
outputs.upToDateWhen { false }
from sourceSets.main.output
from (configurations.compile.collect {zipTree(it)}){
exclude 'META-INF/MANIFEST.MF'
exclude 'META-INF/*.SF'
exclude 'META-INF/*.DSA'
exclude 'META-INF/*.RSA'
}
manifest {
attributes 'Main-Class': project.mainClassName
}
doLast {
copy {
from "/build/libs/"
into "./jar"
}
copy {
from "./Config"
into "./jar/Config"
}
copy{
from "./README.txt"
into "./jar"
}
copy {
from "./scriptfiles"
into "./jar/scriptfiles"
}
file(new File(projectDir, "/build")).deleteDir()
}
}
有什么解决办法吗?
经过一番尝试,我或多或少找到了解决方案。
看来 IntelliJ 可能不是问题所在,而是 Gradle 本身。
在我手动删除位于 %USERPROFILE%\.gradle\caches
下的 Gradle 缓存之后
问题消失了,即使我在 IntelliJ 中切换回项目 A(没有重新导入它也没有构建它)它仍然工作正常。但是我不知道如果我重新导入一个项目它会如何表现。需要注意的一件事是项目 A 使用了问题库的较新版本,因此首先使用较旧的库导入项目可能更可靠。它也可能只是一个随机的一次性错误。