내 gradle 프로젝트는 application
플러그인을 사용하여 jar 파일을 빌드합니다. 런타임 전이 종속성의 일부로 org.slf4j:slf4j-log4j12
. (적어도 5 개 또는 6 개의 다른 전이 종속성에서 하위 전이 종속성으로 참조됩니다.이 프로젝트는 스프링과 하둡을 사용하고 있으므로 부엌 싱크대를 제외한 모든 항목이 가져옵니다 … 기다릴 필요가 없습니다. ).
내가 slf4j-log4j12
만든 항아리에서 항아리 를 전역 적으로 제외하고 싶습니다 . 그래서 나는 이것을 시도했습니다.
configurations {
runtime.exclude group: "org.slf4j", name: "slf4j-log4j12"
}
그러나, 이것은 제외 할 것 모두 org.slf4j
를 포함하여 유물을 slf4j-api
. 디버그 모드에서 실행할 때 다음과 같은 줄이 표시됩니다.
org.slf4j#slf4j-api is excluded from com.pivotal.gfxd:gfxd-demo-mapreduce:1.0(runtime).
org.slf4j#slf4j-simple is excluded from com.pivotal.gfxd:gfxd-demo-mapreduce:1.0(runtime).
org.slf4j#slf4j-log4j12 is excluded from org.apache.hadoop:hadoop-common:2.2.0(runtime).
각 slf4j-log4j12
전 이적 종속성 의 소스를 찾은 다음 compile foo { exclude slf4j... }
내 dependencies
블록에 개별 명령문 을 가질 필요가 없습니다 .
최신 정보:
나는 또한 이것을 시도했다 :
configurations {
runtime.exclude name: "slf4j-log4j12"
}
결국 빌드에서 모든 것을 제외 합니다! 내가 지정한 것처럼 group: "*"
.
업데이트 2 :
이를 위해 Gradle 버전 1.10을 사용하고 있습니다.
답변
아, 다음은 내가 원하는 것을 작동하고 수행합니다.
configurations {
runtime.exclude group: "org.slf4j", module: "slf4j-log4j12"
}
이 보인다 규칙을 제외 만이 두 가지 특성 – group
와 module
. 그러나 위의 구문은 임의의 속성을 조건 자로 지정하는 것을 방지하지 않습니다. 개별 종속성에서 제외하려고 할 때 임의의 속성을 지정할 수 없습니다. 예를 들어 다음은 실패합니다.
dependencies {
compile ('org.springframework.data:spring-data-hadoop-core:2.0.0.M4-hadoop22') {
exclude group: "org.slf4j", name: "slf4j-log4j12"
}
}
와
No such property: name for class: org.gradle.api.internal.artifacts.DefaultExcludeRule
당신은과 종속성을 지정할 수 있습니다 그럼에도 불구 group:
하고 name:
당신은으로 제외를 지정할 수 없습니다 name:
!?!
아마도 별도의 질문이지만 모듈 은 정확히 무엇 입니까? groupId : artifactId : version의 Maven 개념을 이해할 수 있으며 Gradle에서 group : name : version으로 변환됩니다. 그러나 특정 Maven 아티팩트가 속한 모듈 (gradle-speak)을 어떻게 알 수 있습니까?
답변
하나 이상의 라이브러리를 전역 적으로 제외하려면 build.gradle에 다음을 추가하십시오.
configurations.all {
exclude group:"org.apache.geronimo.specs", module: "geronimo-servlet_2.5_spec"
exclude group:"ch.qos.logback", module:"logback-core"
}
이제 제외 블록에는 두 개의 속성 그룹 과 모듈이 있습니다. maven 백그라운드에서 온 사람들을 위해 group 은 groupId 와 동일 하고 module 은 artifactId 와 동일 합니다 . 예 : com.mchange : c3p0 : 0.9.2.1을 제외하려면 다음은 제외 블록이어야합니다.
exclude group:"com.mchange", module:"c3p0"
답변
귀하의 접근 방식이 정확합니다. (상황에 따라를 사용할 수 있습니다 configurations.all { exclude ... }
.) 이러한 제외가 실제로 하나 이상의 종속성을 제외하는 경우 (사용할 때 알아 차린 적이 없음) http://forums.gradle.org 에서 버그를 신고하십시오. , 이상적으로는 재현 가능한 예입니다.
답변
아래 예에서는 제외합니다.
스프링 부트 스타터 톰캣
compile("org.springframework.boot:spring-boot-starter-web") {
//by both name and group
exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat'
}
답변
나는 스프링 부트 1.5.10을 사용하고 있었고 로그 백을 제외하려고 시도했지만 위의 주어진 솔루션이 잘 작동하지 않았으며 대신 구성을 사용합니다.
configurations.all {
exclude group: "org.springframework.boot", module:"spring-boot-starter-logging"
}
답변
@ berguiga-mohamed-amine이 말한 것 외에도 와일드 카드를 사용하려면 모듈 인수를 빈 문자열로 두어야한다는 사실을 방금 발견했습니다.
compile ("com.github.jsonld-java:jsonld-java:$jsonldJavaVersion") {
exclude group: 'org.apache.httpcomponents', module: ''
exclude group: 'org.slf4j', module: ''
}