【问题标题】:Gradle Duplicate handling strategy ProblemGradle Duplicate 处理策略问题
【发布时间】:2021-10-10 10:34:29
【问题描述】:

我有一个多项目成绩。

root
  +---- Project A
  +---- Project B

项目A依赖于项目B。但是gradle首先编译项目A,然后是项目B。

我的文件: settings.gradle

rootProject.name = 'rootProject'
include 'projecta'
include 'projectb'

项目 A build.gradle

dependencies {
    implementation project(':projectb')
    implementation fileTree(dir: '../lib', include: '*.jar')
}

当我构建一个得到错误。但我不知道只能重复处理策略

错误:

Execution failed for task ':projectb:distTar'.
> Entry /lib/projecta.jar is a duplicate but no duplicate handling strategy has been set. Please refer to https://docs.gradle.org/7.1/dsl/org.gradle.api.tasks.Copy.html#org.gradle.api.tasks.Copy:duplicatesStrategy for details.

【问题讨论】:

  • 路径../lib相对于项目A的文件是什么?它们是外部库吗?
  • 是的 ../lib 中的文件是外部库,并且 projecta.jar 也包括在内,因为其他项目也依赖于这个库文件夹
  • A的默认jar输出路径为project_root/projecta/build/libs/。你是怎么把projecta.jar放到project_root/lib的?

标签: gradle build.gradle


【解决方案1】:
task copyJarToLib(type: Copy) {
    if (project.name == 'projecta') {
        copy {
            from jar
            into '../lib'
            eachFile { file ->
                println 'Copying file ' + file + ' to ./lib'            
            }
        }        
    }
}

distZip.finalizedBy = [copyJarToLib]

但它会将文件复制到早期。我想在整个模块完成后复制文件

【讨论】:

    【解决方案2】:

    这对我有用

    task copyDxComToLib(dependsOn: jar) {
        doLast {
            println '*** COPY PROJECTA.JAR TO LIB ***'
            copy {
                from '../build/projecta.jar'
                into '../lib'
                eachFile { file ->
                    println '*** Copying file ' + file + ' to ./lib'
                }
            }
            
            println '*** COPY PROJECTA.JAR TO LIB ***'
        }
    }
    
    distZip.dependsOn = [copyprojectaDxComToLib]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-22
      • 2020-10-08
      • 1970-01-01
      • 2011-01-23
      • 2011-12-26
      • 1970-01-01
      • 1970-01-01
      • 2022-10-02
      相关资源
      最近更新 更多