Как исключить зависимости из BOOT-INF / classes? - PullRequest
0 голосов
/ 30 октября 2018

У меня есть проект весенней загрузки, и я получаю эту ошибку при попытке его собрать:

> gradle build
:processResources
:compileJava
:classes
:jar FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':jar'.
> archive contains more than 65535 entries.

  To build this archive, please enable the zip64 extension.
  See: https://docs.gradle.org/3.5.1/dsl/org.gradle.api.tasks.bundling.Zip.html#org.gradle.api.tasks.bundling.Zip:zip64

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

Хорошо, я добавил опцию zip64 = true в задачу jar в конфигурации gradle. Теперь он может успешно создать JAR, но когда я пытаюсь выполнить JAR, я получаю следующее исключение:

Exception in thread "main" java.lang.IllegalStateException: java.lang.IndexOutOfBoundsException
    at org.springframework.boot.loader.ExecutableArchiveLauncher.<init>(ExecutableArchiveLauncher.java:43)
    at org.springframework.boot.loader.JarLauncher.<init>(JarLauncher.java:37)
    at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:58)
Caused by: java.lang.IndexOutOfBoundsException
    at org.springframework.boot.loader.jar.AsciiBytes.<init>(AsciiBytes.java:69)
    at org.springframework.boot.loader.jar.CentralDirectoryFileHeader.load(CentralDirectoryFileHeader.java:95)
    at org.springframework.boot.loader.jar.CentralDirectoryParser.parseEntries(CentralDirectoryParser.java:68)
    at org.springframework.boot.loader.jar.CentralDirectoryParser.parse(CentralDirectoryParser.java:57)
    at org.springframework.boot.loader.jar.JarFile.<init>(JarFile.java:118)
    at org.springframework.boot.loader.jar.JarFile.<init>(JarFile.java:106)
    at org.springframework.boot.loader.jar.JarFile.<init>(JarFile.java:92)
    at org.springframework.boot.loader.jar.JarFile.<init>(JarFile.java:83)
    at org.springframework.boot.loader.archive.JarFileArchive.<init>(JarFileArchive.java:61)
    at org.springframework.boot.loader.archive.JarFileArchive.<init>(JarFileArchive.java:57)
    at org.springframework.boot.loader.Launcher.createArchive(Launcher.java:129)
    at org.springframework.boot.loader.ExecutableArchiveLauncher.<init>(ExecutableArchiveLauncher.java:40)
    ... 2 more

Оказалось, что SpringBoot даже не поддерживает формат zip64, поэтому мне пришлось провести дополнительное расследование. Откуда поступает 65535+ записей? Очевидно, что они происходят от зависимостей, потому что проблема существует с Я добавил новую зависимость в файл build.gradle. Исследуя банку zip64, я обнаружил, что все классы зависимостей! находятся в папке BOOT-INF / classes.

Как я понимаю, структура должна выглядеть как

BOOT-INF/
    classes/
        <only this application's compiled classes>
    libs/
        <all the dependency jars>

Но в моей папке классов есть все "извлеченные" файлы jar зависимостей. ( Как видите )

Я извлек jar, удалил все классы зависимостей из этой папки и снова распаковал его ( Как это ) Таким образом, его можно без проблем запустить , поэтому я уверен, что эти файлы не нужны.

Может кто-нибудь помочь мне, как исключить эти классы зависимостей из структуры? Заранее спасибо!

Вот моя соответствующая конфигурация gradle:

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'application'
apply plugin: 'org.springframework.boot'

ext.springBootVersion = '1.4.2.RELEASE'

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:1.4.2.RELEASE")
    }
}

configurations {
    provided.all*.exclude group: 'javax.servlet'
}

mainClassName = 'com.path.to.my.MainClass'

repositories { 
    mavenCentral() 
    maven { 
        url "https://repository.jboss.org/nexus/content/repositories/releases" 
    }
    maven {
        url "https://repo.eclipse.org/content/groups/releases/"
    }
}

jar {
//zip64 = true
    from {
        configurations.compile.collect { 
            it.isDirectory() ? it : zipTree(it) 
        } 
    }
    manifest {
        attributes("Main-Class": mainClassName)
    }
    exclude 'META-INF/*.RSA', 'META-INF/*.SF','META-INF/*.DSA'
}

sourceCompatibility = 1.8
targetCompatibility = 1.8

dependencies {
    compile 'aopalliance:aopalliance:1.0'   
    compile 'com.google.code.gson:gson:2.7'
    compile 'com.google.gdata:core:1.47.1'
    compile 'com.google.guava:guava:19.0'
    compile 'commons-io:commons-io:2.4'
    compile 'javax.json:javax.json-api:1.0'
    compile 'mysql:mysql-connector-java:5.1.22'
    compile 'org.apache.commons:commons-csv:1.4'
    compile 'org.flywaydb:flyway-core:4.0.3'
    compile 'org.glassfish:javax.json:1.0.4'
    ......
    testCompile 'org.springframework.boot:spring-boot-starter-test'
}

bootRun {
    addResources = true
}

task wrapper(type: Wrapper) {
    gradleVersion = '2.3'
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...