2017-12-24 4 views
0

나는 Gradle로 마이그레이션하려는 혼합 Java/Scala Maven 다중 프로젝트를 사용하고 있습니다.Gradle - 특정 하위 프로젝트에 대한 플러그인 구성을 적용하는 방법?

일부 하위 프로젝트에는 Java 코드 만 있고 일부는 스칼라 코드 만 있고 일부는 둘다 있습니다. 이 중 하나에 자바 플러그인을 적용하면 정상적으로 작동하지만 스칼라 코드가없는 프로젝트에서 스칼라 플러그인을 적용하려고하면 의존성이 없어서 (스칼라 언어) 실패합니다.

이제 특정 하위 프로젝트에 스칼라 플러그인을 적용하고 싶습니다. 그것이 실패로 나는 또한 (이 전에 자바 플러그인이 실행을 실행해야

apply plugin: 'scala' 
sourceSets.main.scala.srcDir "src/main/java" 
sourceSets.main.java.srcDirs = [] 

: 내 자바 코드의 일부는 스칼라 코드에 의존하기 때문에뿐만 아니라, 나는 또한 다음과 같은 구성을 적용해야 그렇지 않으면).

이 줄을 특정 스칼라 하위 프로젝트 각각에 복사하지 않고 빌드 파일에 간단한 속성을 추가하기 만하면됩니다. 이것을 어떻게 할 수 있습니까?

+1

이 줄을 별도의'.gradle' 파일에 넣은 다음 각 파일에서'apply : myScalaStuff.gradle'을 사용할 수 있습니다. –

+0

@OliverCharlesworth 그게 효과가 있으며, 실제로는 지금까지 내가 선호하는 방법입니다. 답으로 추가 할 수 있습니까? –

답변

1

당신은 당신의 최상위 build.gradle이 같은 작업을 수행 할 수 있습니다

subprojects { 
    ... 
    if(file("src/main/scala").directory) { // or whatever condition you want to use 
     apply plugin: 'scala' 
     // This seems like a very weird thing to do ... 
     // Assuming, you know what you are doing 
     sourceSets.main.scala.srcDir "src/main/java" 
     sourceSets.main.java.srcDirs = [] 
    } 
    ... 
    } 
+0

좋은 속임수 :) 나는 실제로 이러한 마술 트릭을 피하고이를보다 명확하게 만들었 기 때문에 프로젝트에 참여한 다른 사람들에게 더 명확 해지며 Groovy에 익숙하지 않은 경우도 있습니다. 'sourceSets'에 대해서는 기본적으로 Java 클래스에서 스칼라 코드를 가져올 수 없다는 문제를 해결하기 위해 실제로 살펴 보았습니다. 자바 플러그인의 컴파일을 불가능하게하고, 스칼라도 자바 파일을 컴파일 할 수있게한다. –

+0

나는 그 때 당신의 질문이 무엇인지 확실하지 않습니다. 당신은 "마술 트릭"을 사용하거나 서브 프로젝트의 빌드 파일에서 서브 프로젝트 고유의 것을 명시 적으로 철자합니다. 당신의 질문은 후자가 당신이 피하고 싶었던 것과 똑같다고 들었습니다. 이제, 당신은 이전과 같은 것을 피하고자합니다 : – Dima

+0

나는 단지 명시 적으로 태그가 달린/프로젝트. 나에게 마술처럼 보이지는 않는다. –

0

을 나는 here를 설명한대로, 프로젝트 필터링을하고 싶은 생각합니다.
그래서, 간단히 말해서 : Gradle을이 그루비 구문을 사용하기 때문에

물론
configure(subprojects.findAll {it.name == 'myScalaProject'}) { 
    // Scala projects specific settings 
} 

, 당신은 목록에있는 프로젝트 이름을 넣어 contains 또는 무엇이든 대신 간단한 == 조건을 할 수 있습니다.

+0

그럴 테지만, scala를 사용하는 프로젝트 목록을 관리하고 싶지는 않습니다. 대신, 나는 각 프로젝트를 개별 빌드 파일에 개별적으로 "주석을 추가"하고 싶습니다. 특정 속성이있는 프로젝트를 컴파일하기 전에이 메서드를 실행하는 방법이 있습니까? 나는'ext'와'it.hasProperty()'를 사용하려했지만 서브 프로젝트의'ext'가'configure' 다음에 실행되는 것처럼 보입니다. –

관련 문제