2012-05-15 2 views
3

gen이라는 추가 자바 소스가 컴파일 된 경고 소스가있는 생성 소스처럼 사용합니다. gradle eclipse 작업은이 세트의 소스 디렉토리를 Eclipse 소스 폴더로 구성하므로보고 싶지 않은 많은 경고가 발생합니다. 또 다른 이유는 생성 된 소스 코드가 변경되어서는 안된다는 것입니다. 누군가가 우연히 그것을 편집하는 것을 원하지 않습니다. 정규 코드라고 생각합니다.Make Gradle 이클립스 소스 폴더로 소스 세트 디렉토리를 사용하지 마십시오.

기존 구성을 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에 추가하여 비슷한 시나리오를 해결했습니다.

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

는 데 도움이 이클립스는 다른 코드가 사용하고있는 생성 소스에 대해 알지 못한다면 대신 컴파일러 오류으로 끝날 수도있다.

하지만 gradle이 두 번째 jar 또는 이와 비슷한 것을 만드는 데 사용하는 소스 디렉토리가 있다면 어쩌면. 내 프로젝트 파일이 다른 프로젝트의 소스를 참조하는 약간 다른 상황이

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) } 
      } 
     } 
    } 
} 
0

경우 :

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 

희망을 다음과 같이

이 내가 (내 경우, 소스 폴더가 병합 만 패키지 차이가 ​​있었다)이 달성 방법

다음
관련 문제