2012-05-15 36 views
3

我有一個額外的Java源代碼中我的體型設置,稱爲gen - 就像有很多在他們的編譯器警告的產生來源。 gradle eclipse任務將該組的源目錄配置爲eclipse源文件夾,這會導致很多我不想看到的警告。另一個原因是,生成的源代碼不應該改變 - 我不希望有人偶然編輯它,認爲它是一個普通的代碼。讓搖籃不使用源設置目錄作爲Eclipse的源文件夾

以下的工作,但只有當覆蓋現有的配置gradle eclipse

eclipse.classpath.file { 
    whenMerged { classpath -> 
     classpath.entries.removeAll { 
      entry -> entry.kind == 'src' && entry.path == 'src/gen/java' 
     } 
    } 
} 

但是,這是行不通的,如果配置清洗 - gradle cleanEclipse eclipse,這是當你第一次導入項目在日食發生了什麼。

EclipseClasspath object documentation,我認爲唯一的另一種方法是使用eclipse.classpath.file.withXml,但它接縫太亂以至於無法編輯原始xml。

還有沒有其他更優雅的解決方案?

回答

0

我通過將'gen'目錄添加到主java sourceSet中解決了類似的情況。

如下

configurations { 
jaxb 
} 

dependencies { 
    jaxb 'com.sun.xml.bind:jaxb-xjc:' 
} 

sourceSets.main.java.srcDirs 'gen' 

task createGenDirs() { 
    file("gen").mkdirs() 
} 

task jaxb << { 
    dependsOn createGenDirs 

    //generate src into gen directory 

} 

task cleanGeneratedCode(type: Delete) { 
    delete file("gen") 

clean.dependsOn cleanGeneratedCode 

希望這有助於

0

這是我如何實現這一點(在我的情況下,源文件夾合併,只有包裝不同):

apply plugin: 'java' 
sourceSets { 
    main { 
     java { 
      srcDir 'src/main/java' 
      exclude 'com/foo/generated/**' 
     } 
    } 
    // This sourceset is ignored by Eclipse 
    gen { 
     java { 
      srcDir 'src/main/java' 
      include 'com/foo/generated/**' 
     } 
    } 
} 
// Include in a real build from Gradle rather than Eclipse 
compileJava { 
    source sourceSets.gen.java 
} 
0

如果Eclipse不知道其他代碼正在使用的生成源,那麼最終可能會在Eclipse中以編譯器錯誤取而代之。

但也許,如果有一個源目錄gradle這個用創建第二個罐子,或者類似的東西。如果你有一個東西作爲一個單獨的源集,那麼您可以排除從日食:

sourceSets { 
    main { 
     java { srcDir 'src' } 
    } 
    gen { 
     java { srcDir 'src-gen' } 
    } 
} 
eclipse { 
    classpath { 
     sourceSets -= [sourceSets.gen] 
    } 
} 

我有一個稍微不同的情況下我的項目文件引用另一個項目的源代碼,所以我不希望任何代碼在Eclipse中出現:

sourceSets.main.java { srcDir '../other_project/src' } 
eclipse { 
    classpath { 
     // remove the source set from the Eclipse classpath 
     sourceSets -= [sourceSets.main] 
    } 
    // Don't let the src dir show up as a linked folder either 
    project { 
     file { 
      withXml { 
       def res = it.asNode().get('linkedResources')[0] 
       res.link.findAll{ it.name[0].text() == 'src' }.each{  
        res.remove(it) } 
      } 
     } 
    } 
}