【问题标题】:How to build executable micronaut jar如何构建可执行的 micronaut jar
【发布时间】:2020-07-14 15:00:09
【问题描述】:

我使用

创建了一个 micronaut 应用程序
mn create-app my-app

它使用 Dockerfile 生成项目结构。 docker 文件正在寻找要复制的文件my-app-*-all.jar

FROM openjdk:14-alpine
COPY build/libs/my-app-*-all.jar my-app.jar
EXPOSE 8080
CMD ["java", "-Dcom.sun.management.jmxremote", "-Xmx128m", "-jar", "my-app.jar"]

如何生成 my-app-*-all.jar?

./gradlew jar 没有生成 (-all) jar。

已编辑:它只生成my-app-0.1.jar,当我使用那个 jar 时,它给出了一个错误。 no main manifest attribute, in build/libs/my-app-0.1.jar 我需要在 build.gradle 文件中添加任何额外的行吗?

【问题讨论】:

  • 使用 CLI 提供的模板,./gradlew assemble 应该构建 jar,来自 shadowJar 的任务将构建 *-all.jar。运行 ./gradlew assemble 时是否有任何错误? (特别是因为您的项目名称中的 new 保留关键字?
  • @Airy 我没有收到任何错误 ./gradlew jar./gradlew assemble 都在生成 jar。但是当我在 Dockerfile 或本地使用 jar 文件时。我收到错误 no main manifest attribute, in build/libs/my-app-0.1.jar
  • 发现已经有人问过类似的问题了。 stackoverflow.com/questions/58755410/…
  • "我需要在 build.gradle 文件中添加任何额外的行吗?" - 如果不知道您的 build.gradle 中当前有什么,这是不可能说的。
  • @JeffScottBrown build.gradle 是由 micronaut-cli 自动生成的。我相信,对于运行mn create-app my-app 的任何人来说,生成的文件都是一样的。我现在很好,因为 ./gradlew shadowJar 创造了奇迹。

标签: gradle build.gradle micronaut


【解决方案1】:

如何生成 my-app-*-all.jar?

如果您使用默认的 Gradle 构建配置,assemble 会这样做。

~ $ mn --version
Micronaut Version: 2.0.0
JVM Version: 1.8.0_252
~ $ 
~ $ mn create-app my-app
| Application created at /Users/jeffscottbrown/my-app
~ $ 
~ $ cd my-app
my-app $ 
my-app $ ./gradlew assemble

BUILD SUCCESSFUL in 2s
10 actionable tasks: 10 executed
my-app $ 
my-app $ ls -l build/libs 
total 27160
-rw-r--r--  1 jeffscottbrown  staff  13473553 Jul 16 10:23 my-app-0.1-all.jar
-rw-r--r--  1 jeffscottbrown  staff      1457 Jul 16 10:23 my-app-0.1.jar

【讨论】:

  • 注意:./gradlew assemble 不会在生成项目时使用 jib 功能生成 *all.jar。即当你使用mn create-app my-app --features jib
【解决方案2】:
./gradlew shadowJar

将生成my-app-0.1-all.jar

注意:在提供此答案时,当我在生成项目时使用 jib 功能时,似乎缺少影子插件。 即当你使用 mn create-app my-app --features jib build.gradle 文件中不存在 shadowPlugin。 如果是这种情况:在 build.gradle 中添加以下行

plugins {
    ...
    id "com.github.johnrengelman.shadow" version "6.0.0"
}

shadowJar {
    mergeServiceFiles()
}

【讨论】:

  • "当您使用 mn create-app my-app --features jib shadowPlugin 时 build.gradle 中不存在" - 这与原始问题中提出的情况不同。原来的问题具体说mn create-app my-app
  • @JeffScottBrown 很抱歉,如果它令人困惑。答案仅针对原始问题。我只是在陈述一个事实,我希望未来的读者能意识到这一点。 mn create-app my-app 在 build.gradle 中有 shadow 插件,而命令 mn create-app my-app --features jib 在 build.gradle 中没有 shadow 插件。我将尝试编辑答案并将其作为注释。
  • 很高兴你明白了。万事如意!
猜你喜欢
  • 1970-01-01
  • 2016-12-30
  • 2018-04-06
  • 2010-10-04
  • 2010-12-21
  • 2017-03-19
相关资源
最近更新 更多