spring-boot - SpringBoot Gradle 插件不会重新打包 Maven 子模块(内部解决方法)

标签 spring-boot gradle

我的 SpringBoot 项目依赖于一个大的 Maven 项目:

aSpringBootProject/build.gradle:

...
dependencies {
    ...
    implementation 'my.big:maven.dependency'
    ...
}

这个大型 Maven 项目依赖于一个仅包含依赖项的子模块:

bigMavenDependency/pom.xml
...
<dependencies>
    ...
    <dependency>
        <group>my.big</group>
        <artefact>sub.module</artefact>
    </dependency>
    ...
</dependencies>

bigSubModule/pom.xml
...
<package>pom</package>
...
<dependencies>
    <!-- a lot of dependencies here -->
</dependencies>

当我构建我的 bootJar 并运行它时 (java -jar aSpringBootProject.jar) 我有这个错误:
Exception in thread "main" java.lang.IllegalStateException: Failed to get nested archive for entry BOOT-INF/lib/sub-module-1.0-SNAPSHOT.pom
    at org.springframework.boot.loader.archive.JarFileArchive.getNestedArchive(JarFileArchive.java:108)
...
Caused by: java.io.IOException: Unable to open nested jar file 'BOOT-INF/lib/sub-module-1.0-SNAPSHOT.pom'
    at org.springframework.boot.loader.jar.JarFile.getNestedJarFile(JarFile.java:254)
...   
Caused by: java.io.IOException: Unable to find ZIP central directory records after reading 2628 bytes
    at org.springframework.boot.loader.jar.CentralDirectoryEndRecord.<init>(CentralDirectoryEndRecord.java:65)

解压我的 bootJar 给我一个 pom 文件,其中有很多 jar 文件。
gradle bootRun命令就像一个魅力。

一种解决方法是排除子模块,然后将其作为依赖项添加到我的 build.gradle 中:
...
dependencies {
    ...
    implementation 'my.big:maven.dependency' {
        exclude 'my.big:sub.module'
    }
    implementation 'my.big:sub.module'
    ...
}

我哪里错了?

最佳答案

你可以试试:

...
<dependencies>
    ...
    <dependency>
        <group>my.big</group>
        <artefact>sub.module</artefact>
        (here try <packaging>jar</packaging> or <type>jar</type>)
    </dependency>
    ...
</dependencies>

使用 compile group: 'com.fasterxml.jackson', name: 'jackson-bom', version: '2.9.8', ext: 'pom' 时,我在 gradle 中遇到了同样的问题与 Spring 的引导 jar 。当我删除 , ext: 'pom'问题得到了解决。

关于spring-boot - SpringBoot Gradle 插件不会重新打包 Maven 子模块(内部解决方法),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52515621/

相关文章:

java - gradle + spring MVC + spring boot + jsp = 404错误?

java - Spring Boot Filter 没有过滤我所有的日志

android - 更新 dexguard 版本时抛出错误 - Crashlytics 插件在 DexGuard 插件之前应用

android - 如何从android中项目的根目录添加另一个gradle文件

java - 本地主机 Spring Boot 中的错误 404

java - Keycloak java.lang.NoClassDefFoundError : java/security/acl/Group using Springboot

java - 如何将 SSL 证书添加到 cacerts 和 keystore ?

gradle - Gradle如何:从依赖项中解压缩ZIP文件中的ZIP文件,并保持增量生成功能

gradle - java.lang.IllegalStateException:不支持替换其他插件可能已经使用的现有任务

从 Github Gradle 导入 Android Studio 不构建不同的计算机