[java] Gradle에서 사용하지 않는 종속성을 찾고 제거하는 방법

내 프로젝트에서 사용하지 않는 종속성을 찾고 싶었습니다. Maven과 같이 Gradle에 이에 대한 기능이 있습니까?



답변

업데이트 : 28-06-2016 : 사용되지 않는 종속성에 대한 Android 지원

20176 월 에는을 릴리스 4.0.0 version
하고 루트 프로젝트 이름 "gradle-lint-plugin"
"nebula-lint-plugin". 또한 unused-dependencyAndroid 지원을 추가했습니다 .


20165 월 Gradle은 원치 않는 종속성을 찾고 제거하기 위해 Gradle lint 플러그인 을 구현했습니다.

Gradle Lint 플러그인 : 전체 문서

Gradle Lint 플러그인은 Gradle 스크립트 및 관련 파일의 오용 또는 지원 중단 패턴을 식별하고보고하기위한 플러그 가능하고 구성 가능한 linter 도구입니다.

이 플러그인에는 다양한 규칙이 있습니다. 사용하지 않는 종속성 규칙 은 그중 하나입니다. 세 가지 특성이 있습니다.

  1. 사용하지 않는 종속성을 제거합니다.
  2. 코드에서 직접 사용하는 전이 종속성을 명시적인 1 차 종속성으로 승격합니다.
  3. 종속성을 ‘올바른’구성으로 재배치합니다.

규칙을 적용하려면 다음을 추가하십시오.

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로 재배치됩니다.


업데이트 : 이전 플러그인

귀하의 친절한 정보를 위해 이전 플러그인에 대해 공유하고 싶습니다

  1. 사용되지 않는 종속성, 선언 및 전이를 찾는 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

Github

외관상으로는 활발하게 개발 중이지만 아직 테스트하지 않았습니다.

편집 : 사실 꽤 굉장합니다. 많은 조언을 제공합니다 (예 : 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이 있습니까? )가 있습니다.


답변

대부분의 역사적인 답변에 대한 프로젝트는 죽었지 만 gradle-dependency-analyze 는 2016-05-30 현재 살아있는 것으로 보입니다.


답변