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

云原生Buildpacks/Paketo与Java /Spring Boot:如何配置不同的JDK下载uri(例如,无法访问github.com)

单于智
2023-03-14

有一个Spring Boot应用程序,我试图用< code > spring-boot-maven-plugin goal < code > mvn spring-boot:build-image 来构建它。但是构建无法从< code>github.com下载< code > bellsoft-JRE 11 . 0 . 9 . 11-Linux-amd64 . tar . gz ,因为我无法从我的构建管道访问它:

...
Paketo BellSoft Liberica Buildpack 5.2.1
  https://github.com/paketo-buildpacks/bellsoft-liberica
  Build Configuration:
    $BP_JVM_VERSION              11.0.9          the Java version
  Launch Configuration:
    $BPL_JVM_HEAD_ROOM           0               the headroom in memory calculation
    $BPL_JVM_LOADED_CLASS_COUNT  35% of classes  the number of loaded classes in memory calculation
    $BPL_JVM_THREAD_COUNT        250             the number of threads in memory calculation
    $JAVA_TOOL_OPTIONS                           the JVM launch flags
  BellSoft Liberica JDK 11.0.9: Contributing to layer
    Downloading from https://github.com/bell-sw/Liberica/releases/download/11.0.9.1+1/bellsoft-jdk11.0.9.1+1-linux-amd64.tar.gz
unable to invoke layer creator
unable to get dependency jdk
unable to download https://github.com/bell-sw/Liberica/releases/download/11.0.9.1+1/bellsoft-jdk11.0.9.1+1-linux-amd64.tar.gz
unable to request https://github.com/bell-sw/Liberica/releases/download/11.0.9.1+1/bellsoft-jdk11.0.9.1+1-linux-amd64.tar.gz
ERROR: failed to build: exit status 1

有没有办法将 bellsoft-jdk11.0.9.1 1-linux-amd64.tar.gz下载到我的构建管道可以访问的位置,并将贝尔软件-liberica 构建包配置为改用它?

共有3个答案

公孙嘉禧
2023-03-14

我把pom.xml的Java改成17:

<properties>
    <java.version>17</java.version>
    <spring-cloud.version>2020.0.2</spring-cloud.version>
</properties>
沃盛
2023-03-14

我创建绑定:

/bindings/bellsoft-jdk-config
├── 786c48fa6429d6a3f0afb189a65f0a43772e42afbab836852b9a1fdfdb8fc502
├── a3092627b082cb3cdbbe4b255d35687126aa604e6b613dcda33be9f7e1277162
├── be27df8838a6d069a2212de5f46da4e39f33f087f2e77c8a725d0f7ec8b5273e
├── d9ff2d84528a2154ff669b85e6dbdee7f244194dcc64e0a8a1bedc470b3bcf56
└── type

然后创建了一个docker文件,它复制了这些绑定,并基于以前的平台构建了一个新的平台:

FROM paketobuildpacks/builder:0.0.464-base-platform-api-0.3
 
COPY bindings /platform/bindings
 
CMD ["/bin/bash"]
docker build -t your-repo-url/java-builder-test:1 .
docker push your-repo-url/java-builder-test:1

然后我配置了spring插件来使用这个平台:

<configuration>
    <imageBuilder>your-repo-url/java-builder-test:1</imageBuilder>
    <layers>
        <enabled>true</enabled>
    </layers>
    <image>
        <name>your-repo-url/${project.artifactId}:${project.version}</name>
    </image>
</configuration>

此解决方法有效,但您必须使用正确的目录权限。

马星阑
2023-03-14

根据文档:

Paketo Buildpacks可以从互联网上下载依赖项。例如,默认情况下,Java Buildpack将从Liberica github版本下载BellSoft Liberica JRE。如果从构建环境无法访问依赖关系URI,则可以使用绑定将新的URI映射到给定的依赖关系。

使用spring-boot-maven-plugin(或Gradle插件)配置绑定需要Spring Boot 2.5。如果您使用的是旧版本,则需要升级或切换到打包CLI。

===使用带有绑定的pack CLI配置不同的JDK下载uri ===

pack文档告诉我们绑定目录的一般布局(/Platform/bindings稍后在pack build容器中创建):

/chooseYourBindingsName
├── key-name-of-our-buildpacks-binding-configuration
└── type-name-of-our-buildpacks-binding-configuration

1.创建绑定目录

所以让我们尝试创建一个完全运行的示例!为了将绑定配置交给packCLI,我们需要先创建一个目录:

mkdir bellsoft-jdk-config && cd bellsoft-jdk-config

2. 创建包含绑定键的文件类型

现在我们需要在此目录中创建一个名为 type 的文件,其中包含 bellsoft-liberica 绑定类型依赖关系映射的绑定键:

echo "dependency-mapping" >> type

一个新的文件type应该存在于包含字符串依赖映射的目录中。

3.从buildpack.toml中选择JDK版本

因为我们想要改变JDK的下载uri,我们需要决定我们确切想要使用哪个JDK版本。bellsoft-liberica buildpack的buildpack.toml概述了buildpack中可用的JRE/JDK版本。对于这个例子,我使用了最新的JDK版本< code>11,它在< code>buildpack.toml中配置如下:

...

[[metadata.dependencies]]
id      = "jdk"
name    = "BellSoft Liberica JDK"
version = "11.0.9"
uri     = "https://github.com/bell-sw/Liberica/releases/download/11.0.9.1+1/bellsoft-jdk11.0.9.1+1-linux-amd64.tar.gz"
sha256  = "786c48fa6429d6a3f0afb189a65f0a43772e42afbab836852b9a1fdfdb8fc502"
stacks  = [ "io.buildpacks.stacks.bionic", "org.cloudfoundry.stacks.cflinuxfs3" ]
...

4.下载JDK

在决定了版本之后,我们需要从<code>uri</code>字段中提供的位置下载JDK到构建环境中稍后可以访问的位置(因为我们无法访问github.com)。让我们假设,我们已经下载了JDK,并且可以在http://your-accessible-uri-to/bellsoft-jdk11.0.9.11-linux-amd64.tar.gz

5.创建名为sha256的文件,其中包含JDK uri

现在,我们应该创建另一个文件,该文件完全根据我们在构建包.toml中选择的JDK版本的[[元数据.依赖项]]部分的sha256摘要值命名。此文件必须包含我们下载的 JDK 的 uri:

echo "http://your-accessible-uri-to/bellsoft-jdk11.0.9.1+1-linux-amd64.tar.gz" >> 786c48fa6429d6a3f0afb189a65f0a43772e42afbab836852b9a1fdfdb8fc502

最后,我们的目录< code>bellsoft-jdk-config应该符合pack CLI bindings目录文档,看起来有点像这样:

/bellsoft-jdk-config
├── 786c48fa6429d6a3f0afb189a65f0a43772e42afbab836852b9a1fdfdb8fc502
└── type

6.使用--volume执行pack CLI进行绑定

最后,我们可以发出packCLI命令。确保包CLI已安装在您的系统上。还请确保使用--envBP_JVM_VERSION=µtJDKversionNumberhere环境变量配置提供确切的JDK版本号,该配置与您下载的JDK版本和buildpack.toml中的部分相匹配:

pack build your-application-name-here \
    --path . \
    --volume $(pwd)/bellsoft-jdk-config:/platform/bindings/bellsoft-jdk-config \
    --env BP_JVM_VERSION=11.0.9 \
    --builder paketobuildpacks/builder:base

现在bellsoft-Liberica buildpack将从超文本传输协议下载JDKtar.gz://Your-acess-uri-to/bellsoft-jdk11.0.9.11-linux-amd64.tar.gz

...
Paketo BellSoft Liberica Buildpack 5.2.1
  https://github.com/paketo-buildpacks/bellsoft-liberica
  Build Configuration:
    $BP_JVM_VERSION              11.0.9          the Java version
  Launch Configuration:
    $BPL_JVM_HEAD_ROOM           0               the headroom in memory calculation
    $BPL_JVM_LOADED_CLASS_COUNT  35% of classes  the number of loaded classes in memory calculation
    $BPL_JVM_THREAD_COUNT        250             the number of threads in memory calculation
    $JAVA_TOOL_OPTIONS                           the JVM launch flags
  BellSoft Liberica JDK 11.0.9: Contributing to layer
    Downloading from http://your-accessible-uri-to/bellsoft-jdk11.0.9.1+1-linux-amd64.tar.gz 
...
 类似资料:
  • 本文向大家介绍SpringBoot配置web访问H2的方法,包括了SpringBoot配置web访问H2的方法的使用技巧和注意事项,需要的朋友参考一下 【前情提要】最近开始搭建博客,在本地调试的时候使用的数据库是h2,但是调试的时候需要查看数据库,本文也由此而来。 下面是我用到的方法: 使用IDEA的Database连接工具,具体操作方法就是按照要求配置连接url,用户名和密码即可。具体操作见下图

  • 刚开始学习shiro, 实现的效果非常简单,首页点击添加(/user/add),应该能直接访问. 而点击更新(/user/update),应该提示登录.但是实际都可以直接点开,不知道哪里出问题了,shiro的配置没生效,请高手赐教,谢谢 环境:java 17 springboot 3.1.1 shiro 1.11.0 pom.xml controller/MyController.java res

  • 问题内容: 有时,当您调试时,会有无法访问的代码片段。无论如何,有没有抑制警告? 问题答案: 在任何编译器上执行此操作的唯一方法是。 如果您使用的是Eclipse,请尝试。

  • 带Springdoc的Spring Boot 2.6.3。 在,当我将路径设置为/v3/api docs或将其删除时,这意味着使用默认路径“/v3/api docs”。Swagger UI页面与API一起正确显示http://localhost:8080/swagger-用户界面/索引。html 但我想覆盖下面的路径 然后SwaggerUI显示"加载远程配置失败"错误:

  • 问题内容: 我正在使用FlatPack来分析和加载平面文件中的数据。这需要加载一个配置文件,该文件存储平面文件各列的映射。 我有一个常量来定义映射文件的位置: 我有一个parse(File dataFile)方法实际上执行解析: 当我罐子了一切并运行它作为一个罐子-它炸弹出来了。该文件虽然在罐子里。 我该怎么办? 我已经看过这个问题以及关于访问jars中文件的问题,他们都建议暂时提取文件。我不想这

  • 问题内容: 我将docker用于laravel项目的开发和生产。我用于开发和生产的dockerfile略有不同。例如,我在开发环境中将本地目录安装到docker容器中,因此我不需要为代码中的每个更改进行docker构建。 由于挂载目录仅在运行docker容器时可用,因此无法在开发文件中将诸如“ composer install”或“ npm install”之类的命令放入dockerfile中。