Gradle에서 사용되지 않는 종속성을 검색/제거하는 방법
나는 내 프로젝트에서 사용되지 않는 종속성을 찾고 싶었다.메이븐처럼 그래들에도 이런 기능이 있나요?
업데이트: 2016년 6월 28일: Android 미사용 의존 지원
2017년 6월에 발매가 되었습니다.
4.0.0 version루트 프로젝트 이름을 변경했습니다."gradle-lint-plugin"로."nebula-lint-plugin"사용하지 않는 의존성에 Android 지원도 추가했습니다.
2016년 5월 Gradle은 불필요한 의존관계를 찾아 제거하기 위한 Gradle lint 플러그인을 구현했습니다.
그래들 린트 플러그인:완전한 문서
Gradle Lint 플러그인은 Gradle 스크립트 및 관련 파일의 오용 또는 폐지 패턴을 식별하고 보고하기 위한 플러그형 구성 가능한 린터 도구입니다.
이 플러그인에는 다양한 규칙이 있습니다.사용되지 않는 종속성 규칙도 그 중 하나입니다.그것은 세 가지 특징을 가지고 있다.
- 사용되지 않는 종속성을 제거합니다.
- 코드에서 직접 사용되는 전이 종속성을 명시적인 첫 번째 순서 종속성으로 승격합니다.
- 종속성을 '올바른' 구성으로 재배치합니다.
규칙을 적용하려면 다음을 추가합니다.
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 apply from 메커니즘에 포함된 gradle 스크립트에서 보풀 규칙을 정의할 것을 권장합니다.
멀티 모듈 프로젝트의 경우 플러그 인을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와 같은 패밀리 스타일의 병에는 코드가 포함되어 있지 않기 때문에 삭제됩니다.
2. 코드에 의해 직접 사용되는 경과적 의존관계를 명시적인 첫 번째 순서 의존관계로 승격합니다.
- 이로 인해 com.amazonaws:aws-java-sdk와 같은 패밀리 스타일의 JAR 파일이 실제로 사용 중인 부품으로 분할되어 1차 종속성으로 추가되는 부작용이 있습니다.
3. 의존관계를 '올바른' 구성으로 재배치합니다.
- 웹자어가 런타임 구성으로 이동됨
- META-INF 이외의 클래스와 콘텐츠를 포함하지 않는 JAR 파일은 런타임으로 이동됩니다.
- 'xerces', 'xercesImpl', 'xml-apis'는 항상 런타임 범위여야 합니다.
- mysql-connector-java와 같은 서비스 공급자(META-INF/services를 포함하는 JAR 파일)는 컴파일 가능한 참조가 없는 경우 런타임으로 이동됩니다.
- 의존관계는 가능한 한 높은 소스 세트 구성으로 이동됩니다.예를 들어, 주 소스 세트(희귀한 경우)에서 명시적으로 종속되지 않는 한 'junit'은 test Compile로 재배치됩니다.
업데이트: 이전 플러그인
참고로 이전 플러그인에 대해 공유하겠습니다.
- 사용되지 않는 종속성, 선언된 종속성 및 전이성을 찾는 Gradle 플러그인은 com.github.nullstress.dependency-analysis입니다.
그러나 최신 버전 1.0.3은 2014년 12월 23일에 작성되었습니다.그 후 업데이트는 없습니다.
N.B: 많은 엔지니어들이 버전 번호만 업데이트하고 다른 것은 업데이트하지 않았기 때문에 이 플러그인에 대해 혼란스러워하고 있습니다.
이전 답변에서 언급한 프로젝트는 중단된 것 같습니다.나는 gradle-dependency를 사용한다셋업은 간단합니다.
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'ca.cutterslade.gradle:gradle-dependency-analyze:1.0.3'
}
}
apply plugin: 'ca.cutterslade.analyze'
그럼 다음 작업을 수행합니다.
$ gradle analyzeDependencies
https://plugins.gradle.org/plugin/com.autonomousapps.dependency-analysis에서 방금 알게 되었습니다.
외관상으로는 개발은 활발하지만 아직 테스트해 본 적은 없습니다.
편집: 사실 매우 훌륭합니다.많은 조언을 제공합니다(예를 들어 api vs 구현 여부).
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
편집자 메모:이 답변은 구식입니다.맨 위의 정답을 보세요.
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이 있는가?)가 있습니다.
대부분의 역사적 답변에 대한 프로젝트는 사망했지만, 2016년 5월 30일 현재 단계별 의존성 분석은 살아 있는 것으로 보인다.
언급URL : https://stackoverflow.com/questions/19379517/how-to-find-remove-unused-dependencies-in-gradle
'programing' 카테고리의 다른 글
| 글로벌 변수는 항상 '0'으로 초기화되지만 로컬 변수는 초기화되지 않는 이유는 무엇입니까? (0) | 2022.07.24 |
|---|---|
| Vue.js에서 현재 날짜 형식을 지정하는 방법 (0) | 2022.07.24 |
| Vue.js: vue.js에서 조건부 렌더링과 함께 아리아 컨트롤을 사용합니다. (0) | 2022.07.23 |
| 유닛 테스트 C 코드 (0) | 2022.07.23 |
| 구성 요소가 여러 번 로드되면 eventBus가 중복 이벤트를 수신합니다. (0) | 2022.07.23 |