当前位置: 首页 > 知识库问答 >
问题:

Gradle SourceSet IntelliJ vs.Eclipse

施飞雨
2023-03-14

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

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

删除了重复的内容根

一般来说,它是一个分级项目,但我不能在IntelliJ中运行它。它在命令行(./gradlew build)上使用gradle-Wrapper进行构建,但我希望使用IntelliJ进行构建,以改进使用(重新编译+重新加载)和IDE的其他特性的使用。

我有以下模块:

>

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

    src/main/java
    src/test/java
    src/testutils/java
    
    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
    

    我已经试过使用

      null
      null
  • 共有1个答案

    杨昊
    2023-03-14

    我能找到解决我问题的办法。

    源集在模块A中定义,并在模块B中引用。

    模块A的源集:

      null
    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
    }
    ...
    
    dependencies {
      testImplementation project(path: ':A:theNameOfTheModule', configuration: 'testutils')
      ...
    }
    

    模块B只能访问模块A的源集testUtils

     类似资料:

    相关问答

    相关文章

    相关阅读