代码之家  ›  专栏  ›  技术社区  ›  Tobias Nolte

Intellij无法解析具有多个源集的Gradle项目中的符号

  •  0
  • Tobias Nolte  · 技术社区  · 8 年前

    我正在研究一个Gradle项目,它使用多个源集来构建不同的战争。

    从命令行看一切正常。格雷德正确地建立了战争。但在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 回复  |  直到 8 年前
        1
  •  0
  •   Steven Spungin    8 年前

    试试这个:

     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'
       }  
    
        2
  •  0
  •   Tobias Nolte    8 年前

    我找到了一个修复程序,必须通过文件>项目结构>应用程序k>+>模块依赖关系>应用程序main>确定将main的依赖项手动添加到Intellij中的k。 有没有办法让Intellij使用idea gradle插件来实现这一点?

    推荐文章