Hapus semua lib yang tidak perlu dari toples lemak

Saya sedang menulis aplikasi konsol Java menggunakan Spring Boot Jpa dan konektor MySQL. Bagaimana saya dapat dengan mudah mengecualikan semua lib yang tidak perlu dari toples lemak saya?

membangun.gradle

buildscript {
    ext {
        springBootVersion = '1.5.9.RELEASE'
    }
    repositories {
//        mavenCentral()
        jcenter()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
        classpath 'ca.cutterslade.gradle:gradle-dependency-analyze:1.2.0'
    }
}

apply plugin: 'java'
apply plugin: 'org.springframework.boot'
apply plugin: 'ca.cutterslade.analyze'

sourceCompatibility = 1.8
targetCompatibility = 1.8

ext {
    mysqlVersion = '6.0.6'
    hibernateVersion = '5.2.12.Final'
}

repositories {
    mavenCentral()
}

dependencies {
//    compile group: 'org.hibernate', name: 'hibernate-core', version: '5.2.12.Final'
//    compile group: 'org.hibernate', name: 'hibernate-entitymanager', version: '5.2.12.Final'
//    compile group: 'mysql', name: 'mysql-connector-java', version: '6.0.6'
//    compile group: 'org.springframework.boot', name: 'spring-boot', version: '1.5.9.RELEASE'
//    compile group: 'org.hibernate.javax.persistence', name: 'hibernate-jpa-2.0-api', version: '1.0.0.Final'
//    compile group: 'org.springframework', name: 'spring-context', version: '4.3.13.RELEASE'
//    compile group: 'org.springframework', name: 'spring-beans', version: '4.3.13.RELEASE'
//    compile group: 'org.springframework.boot', name: 'spring-boot-autoconfigure', version: '1.5.9.RELEASE'
//    compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.25'
//    compile group: 'org.springframework', name: 'spring-tx', version: '2.5.4'
//    compile group: 'org.springframework.data', name: 'spring-data-jpa', version: '1.11.9.RELEASE'
//    testCompile group: 'org.springframework.boot', name: 'spring-boot-test', version: '1.5.9.RELEASE'
//    testCompile group: 'junit', name: 'junit', version: '4.12'
//    testCompile group: 'org.springframework', name: 'spring-test', version: '4.3.13.RELEASE'



    compile group: 'mysql', name: 'mysql-connector-java', version: mysqlVersion
    compile group: 'org.hibernate', name: 'hibernate-core', version: hibernateVersion
    compile("org.springframework.boot:spring-boot-starter-data-jpa")
    testCompile("org.springframework.boot:spring-boot-starter-test")
}

jar {
    baseName 'ReportGenerator'
    version '1.0'
}

PEMBARUAN

Saya telah mencoba menggunakan gradle-dependency-analyze dan menerima hasil sebagai berikut:

usedUndeclaredArtifacts: 
 - org.hibernate.javax.persistence:hibernate-jpa-2.1-api:1.0.0.Final
 - org.springframework.boot:spring-boot:1.5.9.RELEASE
 - org.springframework:spring-context:4.3.13.RELEASE
 - org.springframework:spring-beans:4.3.13.RELEASE
 - org.springframework.boot:spring-boot-autoconfigure:1.5.9.RELEASE
 - org.slf4j:slf4j-api:1.7.25
 - org.springframework:spring-tx:4.3.13.RELEASE
 - org.springframework.data:spring-data-jpa:1.11.9.RELEASE
unusedDeclaredArtifacts: 
 - mysql:mysql-connector-java:6.0.6
 - org.hibernate:hibernate-core:5.2.12.Final
 - org.springframework.boot:spring-boot-starter-data-jpa:1.5.9.RELEASE

Seperti yang Anda lihat, unused libraries ditandai semua perpustakaan di kelas saya saat ini. Dan required librarieshanya ditandai yang digunakan dalam lingkup kelas saya di aplikasi tetapi jangan beri tahu saya juga bergantung pada apa perpustakaan yang diperlukan ini. Jika saya hanya memasukkan daftar dependensi yang diperlukan ini ke dalam gradle maka saya akan mendapatkan kesalahan inisialisasi yang berbeda karena beberapa perpustakaan terlewatkan.


person Viktor V.    schedule 11.01.2018    source sumber
comment
Karena Anda sebaiknya hanya menambahkan dependensi yang diperlukan dan dependensi tersebut hanya akan membawa dependensi transitif yang diperlukan, seharusnya tidak ada banyak lib yang tidak diperlukan - jika ada. Tentu saja jika Anda hanya menggunakan sebagian dari suatu ketergantungan mungkin ada beberapa ketergantungan transitif yang tidak perlu (karena Anda tidak menggunakan kode yang memerlukannya) - apakah itu yang Anda maksud, yaitu pohon bergetar?   -  person Thomas    schedule 11.01.2018
comment
Anda benar, saya hanya ingin memiliki dependensi di toples saya yang digunakan oleh fungsionalitas aplikasi. Tapi saya tidak tahu cara mudah apa untuk mendeteksi lib apa yang tidak/perlu dikecualikan/ditinggalkan.   -  person Viktor V.    schedule 11.01.2018
comment
Saya ragu analisis Artefak yang tidak digunakan itu benar.   -  person Jens Schauder    schedule 12.01.2018


Jawaban (1)


Beberapa saran.

  1. Gunakan dependency:analyze pada proyek Anda yang akan mencantumkan dependensi yang tidak digunakan, yang dapat Anda kecualikan atau hilangkan.
  2. gunakan atribut <scope> untuk setiap ketergantungan di pom Anda, yang dapat sangat mengurangi ukuran toples lemak Anda. Berikan parameter cakupan yang benar, seperti kompilasi, pengujian .....
person pvpkiran    schedule 11.01.2018