내 프로젝트에서 사용하지 않는 종속성을 찾고 싶었습니다. Maven과 같이 Gradle에 이에 대한 기능이 있습니까?
답변
업데이트 : 28-06-2016 : 사용되지 않는 종속성에 대한 Android 지원
2017 년 6 월 에는을 릴리스
4.0.0 version
하고 루트 프로젝트 이름"gradle-lint-plugin"
을
"nebula-lint-plugin"
. 또한 unused-dependency 에 Android 지원을 추가했습니다 .
2016 년 5 월 Gradle은 원치 않는 종속성을 찾고 제거하기 위해 Gradle lint 플러그인 을 구현했습니다.
Gradle Lint 플러그인 : 전체 문서
Gradle Lint 플러그인은 Gradle 스크립트 및 관련 파일의 오용 또는 지원 중단 패턴을 식별하고보고하기위한 플러그 가능하고 구성 가능한 linter 도구입니다.
이 플러그인에는 다양한 규칙이 있습니다. 사용하지 않는 종속성 규칙 은 그중 하나입니다. 세 가지 특성이 있습니다.
- 사용하지 않는 종속성을 제거합니다.
- 코드에서 직접 사용하는 전이 종속성을 명시적인 1 차 종속성으로 승격합니다.
- 종속성을 ‘올바른’구성으로 재배치합니다.
규칙을 적용하려면 다음을 추가하십시오.
gradleLint.rules += 'unused-dependency'
미사용 종속성 규칙 에 대한 자세한 내용은 마지막 부분에 나와 있습니다.
Gradle Lint 플러그인을 적용하려면 :
buildscript { repositories { jcenter() } }
plugins {
id 'nebula.lint' version '0.30.2'
}
또는 :
buildscript {
repositories { jcenter() }
dependencies {
classpath 'com.netflix.nebula:gradle-lint-plugin:latest.release'
}
}
apply plugin: 'nebula.lint'
린트 할 규칙을 정의합니다.
gradleLint.rules = ['all-dependency'] // Add as many rules here as you'd like
엔터프라이즈 빌드의 경우 init.gradle 스크립트 또는 Gradle 적용 메커니즘을 통해 포함 된 Gradle 스크립트에서 Lint 규칙을 정의하는 것이 좋습니다.
다중 모듈 프로젝트의 경우 플러그인을 allprojects
블록 에 적용하는 것이 좋습니다 .
allprojects {
apply plugin: 'nebula.lint'
gradleLint.rules = ['all-dependency'] // Add as many rules here as you'd like
}
미사용 종속성 규칙 에 대한 자세한 내용은 이 부분에 나와 있습니다.
규칙을 적용하려면 다음을 추가하십시오.
gradleLint.rules += 'unused-dependency'
규칙 검사는 프로젝트의에서 냄새가 나는데 바이너리 컴파일 소스 세트 클래스 참조를 찾고 그리고 당신이 당신의 선언했다고 종속성에 이러한 참조 일치 의존성 블록 .
특히이 규칙은 종속성을 다음과 같이 조정합니다.
1. 사용하지 않는 종속성 제거
- com.amazonaws : aws-java-sdk와 같은 패밀리 스타일 jar는 코드가 포함되어 있지 않으므로 제거됩니다.
2. 코드에서 직접 사용하는 전이 종속성을 명시적인 1 차 종속성으로 승격합니다.
- com.amazonaws : aws-java-sdk와 같은 패밀리 스타일 JAR 파일을 실제로 사용중인 부분으로 분리하고이를 1 차 종속성으로 추가하는 부작용이 있습니다.
3. 종속성을 ‘올바른’구성으로 재배치합니다.
- Webjar가 런타임 구성으로 이동 됨
- META-INF 외부의 클래스 및 콘텐츠를 포함하지 않는 JAR 파일은 런타임으로 이동됩니다.
- ‘xerces’, ‘xercesImpl’, ‘xml-apis’는 항상 런타임 범위 여야합니다.
- mysql-connector-java와 같은 서비스 공급자 (META-INF / 서비스가 포함 된 JAR 파일)는 입증 가능한 컴파일 시간 참조가없는 경우 런타임으로 이동됩니다.
- 종속성은 가능한 가장 높은 소스 세트 구성으로 이동됩니다. 예를 들어, ‘junit’는 기본 소스 세트 (드물게)에 명시적인 종속성이없는 한 testCompile로 재배치됩니다.
업데이트 : 이전 플러그인
귀하의 친절한 정보를 위해 이전 플러그인에 대해 공유하고 싶습니다
- 사용되지 않는 종속성, 선언 및 전이를 찾는 Gradle 플러그인은 com.github.nullstress.dependency-analysis입니다.
그러나 최신 버전 1.0.3은 2014 년 12 월 23 일에 생성되었습니다 . 그 후에는 업데이트가 없습니다.
주의 : 많은 엔지니어들이 버전 번호 만 업데이트했기 때문에이 플러그인 에 대해 혼란스러워하고 있습니다.
답변
이전 답변에서 언급 한 프로젝트는 죽은 것 같습니다. 나는 gradle-dependency-analyze를 사용 합니다. 설정은 간단합니다.
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'ca.cutterslade.gradle:gradle-dependency-analyze:1.0.3'
}
}
apply plugin: 'ca.cutterslade.analyze'
다음을 수행하십시오.
$ gradle analyzeDependencies
답변
Gradle Dependency Analysis Plugin을 사용하여 많은 행운을 얻었습니다 . 시작하려면 Gradle 빌드 스크립트에 다음 두 가지를 추가하세요.
buildscript {
repositories {
maven {
url "https://plugins.gradle.org/m2/"
}
}
dependencies {
classpath "com.github.nullstress:DependencyAnalysisPlugin:1.0.3"
}
}
과
apply plugin: "dependencyAnalysis"
그것들이 제자리에 있으면 gradle analyze
. 사용하지 않는 종속성이있는 경우 아래 텍스트와 유사한 출력과 함께 사용되지 않은 종속성 목록 (선언 및 전이)을 보여주는 빌드 실패가 발생합니다. 빌드 실패는 CI 빌드를 통해 사용되지 않는 종속성이 없도록 강제하려는 경우 매우 편리합니다.
:foo:analyze FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':foo:analyze'.
> The project has unused declared artifacts
답변
나는 이것에 대해 방금 배웠다 : https://plugins.gradle.org/plugin/com.autonomousapps.dependency-analysis
외관상으로는 활발하게 개발 중이지만 아직 테스트하지 않았습니다.
편집 : 사실 꽤 굉장합니다. 많은 조언을 제공합니다 (예 : API와 구현 사용 여부).
답변
편집자 주 :이 답변은 오래되었습니다. 상위 답변을 참조하십시오 .
com.github.nullstress.dependency-analysis Gradle 플러그인을 사용해 볼 수 있습니다.
모든 Gradle 버전에서 사용할 스크립트 스 니펫을 빌드합니다.
buildscript {
repositories {
jcenter()
}
dependencies {
classpath "com.github.nullstress:DependencyAnalysisPlugin:1.0.3"
}
}
apply plugin: "com.github.nullstress.dependency-analysis"
Gradle 2.1에 도입 된 새로운 인큐베이팅 플러그인 메커니즘을위한 스크립트 스 니펫을 빌드합니다.
plugins {
id "com.github.nullstress.dependency-analysis" version "1.0.3"
}
또한 Gradle 포럼에 이에 대한 스레드 ( “mvn dependency : analyze” 에 해당하는 Gradle이 있습니까? )가 있습니다.