当前位置: 首页 > 知识库问答 >
问题:

SpringBootPublish使用1.5重新打包子模块jar。6.

上官季
2023-03-14

我们已经将一个maven多模块项目转换为gradle,并且在Spring Bootjar的发布方面遇到了问题。

设置是这样的

root
|- module1
|- common
|- common-test
|- module2-common
|- module2-write
|- module3-common
|- module3-write
|- module4
|- module5
|- deploy

deploy包含重新打包的jar。

发布时(使用maven publish),工件只有几千字节大。显然,它实际上并没有发布deployjar。

import org.flywaydb.gradle.task.FlywayMigrateTask
import org.springframework.boot.gradle.repackage.RepackageTask
import org.springframework.boot.gradle.run.BootRunTask

plugins {
    kotlin("jvm")
    id("org.springframework.boot") version ("1.5.6.RELEASE")
    id("io.spring.dependency-management") version("1.0.6.RELEASE")
    id("org.flywaydb.flyway")
    java
}

tasks {
    withType<Jar> {
        baseName = project.name
        version = project.version as String
    }

    val implementation = configurations.getByName("implementation")
    configurations.create("includeAllJars") {
        this.extendsFrom(implementation)
    }
    withType<RepackageTask> {
        this.setCustomConfiguration("includeAllJars")
//        this.classifier = "exec"
    }
}

plugins {
    base
    java
    idea
    kotlin("jvm") version "1.2.51"
    kotlin("plugin.jpa") version ("1.2.51")
    kotlin("plugin.spring") version ("1.2.51")
    id("nebula.maven-publish") version "8.1.0"
    ...
}

allprojects {
    group = "com.company.group"

    ext {
        set("springBootVersion", "1.5.6.RELEASE")
    }
    apply {
        plugin("org.jetbrains.kotlin.jvm")
        plugin("org.jetbrains.kotlin.plugin.jpa")
        plugin("org.jetbrains.kotlin.plugin.spring")
    }
    dependencies {
        implementation(kotlin("stdlib-jdk8"))
        implementation(kotlin("reflect"))
        implementation(platform("org.springframework.boot:spring-boot-dependencies:${extra["springBootVersion"]}"))
        ...
    }
}

val sourcesJar by tasks.registering(Jar::class) {
    classifier = "sources"
    from(sourceSets["main"].allSource)
}

publishing {
    publications {
        register("maven", MavenPublication::class) {
//            from(project(":server-deploy").components["java"])
//            artifact(sourcesJar.get())
//            artifact(file("deploy/build/docker/runnable.jar"))
        }
    }
    repositories {
        ...
    }
}

对于publications部分,我尝试从(components[“java”]),工件(文件(“deploy/build/libs/deploy-${project.version}.jar”),以及上面的选项中指定。所有这些都导致发布的jar只有1-3KBs大。

我试图将发布块移动到部署build.gradle.kts,但会导致此错误

* What went wrong:
Execution failed for task ':deploy:publishMavenPublicationToMavenLocal'.
> Failed to publish publication 'maven' to repository 'mavenLocal'
   > Invalid publication 'maven': POM file is invalid. Check any modifications you have made to the POM file.

gradle插件的Spring Boot文档似乎没有列出任何与此相关的内容。


共有1个答案

邢璞
2023-03-14

关于威尔金森先生的评论,他认为Spring Boot似乎不支持Gradle 5是完全正确的。解决方案是在一个包含Spring引导插件的模块中不使用平台(),而是在其他任何地方使用平台()。这不是长久之计!这在我们的案例中是完美的,因为我们直接从Maven过渡到Gradle,然后立即从Spring Boot 1过渡到Spring Boot 2。

plugins {
    id("org.springframework.boot") version ("1.5.6.RELEASE")
    id("io.spring.dependency-management") version("1.0.6.RELEASE")
    id("nebula.maven-publish")
    java
    …
}
dependencyManagement {
    imports { mavenBom("org.springframework.boot:spring-boot-dependencies:${extra["springBootVersion"]}") }
}
dependencies {
    implementation(platform("org.springframework.boot:spring-boot-dependencies:${extra["springBootVersion"]}"))
    …
}
 类似资料:
  • 我使用的是sbt 0.13.8和xsbt-web-plugin 2.0.3 我有一个多模块sbt项目。打包时,其中一个模块应该是war文件的形式。所有其他的都在jar文件中。 当我添加xsbt-web插件时,打包会为所有模块生成jar和war。如何告诉xsbt-web插件仅将自身应用于应该打包为war的模块? 我已经找到了一个解决方案,那就是为每个非战争模块修改packagedArtifacts列

  • 问题内容: 目前,我正在处理一个包含子模块并使用numpy / scipy的python项目。Ipython用作交互式控制台。不幸的是,我对现在使用的工作流程不是很满意,请多多指教。 在IPython中,该框架是通过一个简单的命令加载的。但是,通常有必要在框架的子模块之一中更改代码。至此,一个模型已经加载完毕,我使用IPython与之交互。 现在,该框架包含许多相互依赖的模块,即,在最初加载框架时

  • 任何帮助都是很好的。我在stackoverflow上看到了maven-plugin的配方,但这些配方不适用于Spring-boot。

  • 问题内容: 我使用LWJGL制作了Java游戏,该游戏需要一些本机文件。在Eclipse中一切正常。我想将.dll文件包含在JAR文件中,但是每次尝试时,LWJGL都找不到本机。我已经尝试过使用jarsplice或fatjar,但无济于事。我知道我的世界也是使用LWJGL编程的,它以某种方式设法从另一个文件夹加载本机。 有没有一种方法可以将本机文件打包到JAR文件中,并让第3方库(例如LWJGL)

  • 我有一个python程序,它在运行之前加载了大量数据。因此,我希望能够在不重新加载数据的情况下重新加载代码。对于常规python, reload\u bar我看不到我的更改。我还尝试了pyximport。build\u module()运气不好--模块已重建,但没有重新加载。我在一个“普通”的python shell中运行,如果有什么不同的话,就不是IPython。