【问题标题】:Spring boot Gradle not generating wrapper and not producing runnable jarSpring Boot Gradle 不生成包装器并且不生成可运行的 jar
【发布时间】:2019-08-23 13:03:11
【问题描述】:

我正在尝试使用多阶段 dockerfile 创建一个可以在 Docker 中完全编译和运行的 Spring Boot 应用程序:

###############
#### Build ####
###############
FROM openjdk:13-alpine as builder

WORKDIR /usr/src/app
COPY  . .
RUN path/to/gradlew build

################
#### Deploy ####
################
FROM openjdk:13-alpine
WORKDIR /usr/src/app
COPY --from=builder /usr/src/app/some/path /usr/src/app/

EXPOSE 8080
CMD [java, some/path/someJar.jar]

两件事我无法直截了当:

  1. 我的项目中没有任何 gradlew 文件和 gradlew.bat 文件。即使有一个 gradle/ 目录并且在 gradle/wrapper/gradle-wrapper.properties 我定义了 Gradle 版本 3.5.1。在设置中,我尝试了“默认包装器”和“包装器任务配置”。

Intellij Idea 似乎以某种方式解析了 gradle 可执行文件。不知道可执行文件在哪里。

  1. gradle 在构建时会生成一些输出。但是我无法手动运行或转换为不错的 docker 命令。它基本上编译了java类,就是这样。在java中运行主类不起作用。再一次,使用 Intellij Idea 'run' 工作正常。 Intellij 是做什么的?

【问题讨论】:

    标签: java spring-boot gradle intellij-idea


    【解决方案1】:

    为了创建包装文件,您需要先以其他方式安装 Gradle。检查installation documentation。之后,您需要在项目的根文件夹中运行命令:

    gradle wrapper
    

    这将生成所需的wrapperwrapper.bat 文件。然后您可以使用这些脚本从您的 Dockerfile 运行。有关使用 wrapper 的更多详细信息,请参阅 here

    生成包装文件后,您可以通过转到 Settings -> Build, Execution, Deployment -> Gradle 并应用 Use default gradle wrapper (recommended) 单选按钮来配置 Intellij。然后 IDEA 将使用它。

    【讨论】:

    • 我已经安装了 gradle。 Intellij Idea 不是已经使用包装器了吗?如果它不在那里,它怎么能做到这一点?为了让 Idea 始终只使用包装器,我需要更改什么设置?
    • 如果您不使用gradle wrapper 命令生成包装文件,那么idea 将不会使用它。先生成文件。
    • 当然,我可以生成包装器。但这对我来说没有意义。当他们不在那里时,我什至怎么能选择这个选项?在某个时候,Idea 会下载这些包装器并使用它们。正确的?!?即使我在项目的任何地方都看不到它们。我如何确定它们会被使用?
    • IDEA 不会下载任何东西。您需要使用gradle wrapper 任务自己生成它们。 IDEA 不需要包装器来处理 gradle 项目。正如您所注意到的,它确定了您的本地 gradle 安装。即使这样,它也只使用它来获取有关项目的信息。如果你想使用 IDEA 的 gradle,你需要从 Gradle toolbar 显式调用任务。
    • 我看到 Idea 在 Gradle gradle-wrapper 属性文件中更改 Gradle 时下载了 Gradle 箱。这些垃圾箱存放在哪里?
    猜你喜欢
    • 2019-10-04
    • 2017-09-15
    • 1970-01-01
    • 1970-01-01
    • 2018-07-01
    • 2016-12-30
    • 2014-08-16
    • 1970-01-01
    • 2017-07-02
    相关资源
    最近更新 更多