使用 gradle->gradlew 使用 Docker 构建 jar

问题描述 投票:0回答:1

我是 Docker 新手,我正在研究和学习......所以......对于糟糕的代码感到抱歉。我在构建 docker 映像时尝试生成 jar;我想使用 openjdk 的基本映像并使用 gradlew(gradle-wrapper)进行清理和构建,但我在使用 gradlew 时遇到问题。

目前我有这个代码:

FROM openjdk:17.0.2
LABEL authors="ivanh"
WORKDIR /app
COPY ./ .
RUN ./gradlew clean build
ENTRYPOINT ["ls"]
EXPOSE 8001

当我跑步时

docker build -t citas .
我遇到这个问题

------
 > [4/4] RUN ./gradlew clean build:
0.390
0.390 xargs is not available
0.390
------
Dockerfile:5
--------------------
   3 |     WORKDIR /app
   4 |     COPY ./ .
   5 | >>> RUN ./gradlew clean build
   6 |     ENTRYPOINT ["ls"]
   7 |     EXPOSE 8001
--------------------
ERROR: failed to solve: process "/bin/sh -c ./gradlew clean build" did not complete successfully: exit code: 1

我正在搜索此事并向 IA 询问。我发现一个解决方案是更改 openjdk 映像,另一种解决方案是添加此命令

RUN microdnf install findutils
,但使用最后一个解决方案时,下载和安装 util 的时间非常慢。

我很困惑,因为我认为 gradle-wrapper 的目的是在没有安装 gradle 的情况下运行命令。有人可以帮我澄清一下吗?如果唯一的解决方案是更改 openjdk 映像,您能给我推荐一个吗?

java docker gradle dockerfile gradlew
1个回答
0
投票

尝试使用

gradle:jdk17
基础镜像,它基于 OpenJDK 17.0.10。

FROM gradle:jdk17

WORKDIR /app

COPY . .

RUN ./gradlew clean build

ENTRYPOINT [ "ls" ]

假设测试项目布局如下:

├── app
│   ├── build.gradle.kts
│   └── src
│       ├── main
│       │   ├── java
│       │   │   └── org
│       │   │       └── example
│       │   │           └── App.java
│       │   └── resources
│       └── test
│           ├── java
│           │   └── org
│           │       └── example
│           │           └── AppTest.java
│           └── resources
├── Dockerfile
├── gradle
│   ├── libs.versions.toml
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
└── settings.gradle.kts

© www.soinside.com 2019 - 2024. All rights reserved.