Intellij无法在具有多个SourceSet的Gradle Project中解析符号

时间:2018-08-09 12:01:45

标签: java gradle intellij-idea build.gradle source-sets

我正在研究一个Gradle项目,该项目使用多个Sourcesets来构建不同的WAR。

在命令行中一切正常。 Gradle可正确构建WAR。但是在IntelliJ中,它说对于src / k下的每个* .java文件,它都无法解析src / main中的依赖项。

我试图通过使用idea-gradle插件将目录添加为SourceDirs来修复该问题,但这毫无用处。

plugins {
    id 'org.gretty' version '2.2.0'
    id 'war'
    id 'idea'
}

configurations {
    kCompile.extendsFrom compile
    kRuntime.extendsFrom runtime
}

sourceSets {
    main {}        
    k {
        java {
            compileClasspath += main.output
            runtimeClasspath += main.output   
            srcDirs = ['src/main/java', 'src/k/java/']
        }

        resources { 
            compileClasspath += main.output
            runtimeClasspath += main.output
            srcDirs = ['src/main/resources', 'src/k/resources']
        }
        output.resourcesDir = 'build/resources/main'
        output.classesDir = 'build/classes/java/main'
    }  
}

idea {
    module {
        sourceDirs += file('src/main/java')
        sourceDirs += file('src/k/java')
        downloadJavadoc = true
        downloadSources = false
    }    
}

repositories {
    mavenCentral()
    jcenter()
}

gretty {
    servletContainer = 'tomcat85'
}

dependencies {
    ...
}

task kWar(type: War) {
    appendix = "k"
    from sourceSets.k.output
}


farm {
    webapp "build/libs/App-k.war", contextPath: '/k'
}

project.afterEvaluate {
    farmRunWar.dependsOn kWar
    farmRunWar.shouldRunAfter kWar

}

2 个答案:

答案 0 :(得分:0)

尝试一下:

 k {
    java {
        srcDirs = ['src/main/java', 'src/k/java']
    }

    resources {         
        srcDirs = ['src/main/resources', 'src/k/resources']
    }
    compileClasspath += main.output
    runtimeClasspath += main.output   

    output.resourcesDir = 'build/resources/main'
    output.classesDir = 'build/classes/java/main'
   }  

另一种变化

 k {
    java {
        srcDirs 'src/main/java'
        srcDirs 'src/k/java'
    }

    resources {         
        srcDirs 'src/main/resources'
        srcDirs 'src/k/resources'
    }
    compileClasspath += main.output
    runtimeClasspath += main.output   

    output.resourcesDir = 'build/resources/main'
    output.classesDir = 'build/classes/java/main'
   }  

答案 1 :(得分:0)

我找到了一个修复程序,其中我必须通过文件>项目结构> App_k> +>模块依赖项> App_main>好的方式手动将main的依赖项添加到Intellij中的k。 有没有办法告诉Intellij使用gradle-plug-in这个想法?