【问题标题】:Gradle SourceSet IntelliJ vs. EclipseGradle SourceSet IntelliJ 与 Eclipse
【发布时间】:2020-04-15 23:40:41
【问题描述】:

当我将最初使用 Eclipse 构建的 gradle 项目导入 IntelliJ 时,我表示存在问题。 事实上,该项目是一个 gradle-project,但是当我将它导入 IntelliJ 时,IDE 告诉我它删除了(一些)重复的内容根。

我得到一个气球 - 告诉我:

已删除重复的内容根

事件日志中的消息是:

hh:mm[=22:58] 检测到重复的内容根

模块 [someModuleName] 的路径 [/Users/.../someProject/someModule] 已从模块 [someModuleName.someSourceSetName] 中删除

还有 1 个路径被重复数据删除。详情见创意日志

一般来说,它是一个 gradle-project,但我无法在 IntelliJ 中运行它。 它在 命令行 (./gradlew build) 上使用 gradle-Wrapper 构建,但我希望使用 IntelliJ 构建以改进使用(重新编译+reload) 和 IDE 的其他功能

我有以下模块:

  • A(A 是我尝试构建的模块)

  • B(B是模块,我想重用模块A的sourceSets'main'和'testutils')

模块 A - 由 3 个源集(=main、test、testutils)组成:

src/main/java
src/test/java
src/testutils/java

模块 A 具有 testutils(使用 'main')、test(使用 'main' & 'testutils')、main(模块的生产 java-src)的依赖项

Module B,其中在main src 和tests 中需要Module A 的sourceSet testutils模块 B - 使用 sourceSet 'A/src/main/java' 和 'A/src/testutils/java':

所以我的 gradle 文件是(稍微缩短):

A/build.gradle:

apply plugin: 'maven'

sourceSets {
    test.java.srcDirs +='src/testutils/java'
    testutils
}

dependencies {
    api project('someOtherProjectA')
    ...

    testImplementation project('someOtherProjectZZ')
    testutilsImplementation sourceSets.test.compileClasspath
}

task testutilsJar(type: Jar) {
    from sourceSets.testutils.output
      appendix 'testutils'
}

configurations {
    testutils
}

artifacts {
    testutils testutilsJar
}

uploadTestutils {
    repositories {
        mavenDeployer {
                configuration = configurations.testutils
                repository(url: mavenPublicRepository) {
                      authentication(userName: repoUsername, password: repoPassword)
                }
        }           
    }
}

publish.dependsOn uploadTestutils

B/build.gradlew:

dependencies {
  api project('someOtherProjectB')

  api "someOtherDependency"
  ...

  testImplementation project('someOtherProjectC')       
  testImplementation project(path: ':A:theNameOfTheModule', configuration: 'testutils')
  ...
  
}

我的开发者系统设置:

JDK: 11.0.4
Gradle-Wrapper with Version: gradle-5.5.1
IntelliJ IDEA 2020.1 (Ultimate Edition) - Build #IU-201.6668.121, built on April 8, 2020
    Runtime version: 11.0.6+8-b765.25 x86_64
    VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
    macOS 10.15.4
    Memory: 3987M
    Cores: 16

我已经尝试过使用来自

的答案

我将非常感谢我如何管理我的“testutils”-SourceSet 的建议,它还使用嵌入式 IntelliJ-Build 构建封闭项目:

  • 设置(=构建、执行、部署 > 构建工具 > Gradle
    • 使用 >“IntelliJ IDEA”(而不是“Gradle”)构建和运行
    • 使用 >“IntelliJ IDEA”(而不是“Gradle”)运行测试

【问题讨论】:

  • 您在 IDE 中遇到什么错误?你使用idea Gradle 插件吗?可以提供sample project吗?

标签: java eclipse gradle intellij-idea source-sets


【解决方案1】:

我可以找到解决问题的方法。

sourceSet 在模块 A 中定义并在模块 B 中引用。

模块A的sourceSets:

  • 主要
  • testutils(可以使用 main 并查看 main AND test 的所有依赖项)
  • 测试(测试 main + testutils)

模块 A (build.gradle):

apply plugin: 'maven'

sourceSets {
    testutils
    testutils.compileClasspath += sourceSets.main.output
    testutils.runtimeClasspath += sourceSets.main.output
    test.compileClasspath += sourceSets.testutils.output
    test.runtimeClasspath += sourceSets.testutils.output
}

dependencies {
    api project('someOtherProjectA')
    ...

    testImplementation project('someOtherProjectZZ')
    testutilsImplementation sourceSets.main.compileClasspath
}
...

模块 B (build.gradle):

dependencies {
  testImplementation project(path: ':A:theNameOfTheModule', configuration: 'testutils')
  ...
}

模块 B 只能访问模块 A 的 sourceSet testutils

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-23
    • 2015-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多