From 56bcfef2196e89ad7bdd89be22a3aa36c4dc9cf3 Mon Sep 17 00:00:00 2001 From: GuangJie1 Date: Thu, 15 May 2025 11:04:14 +0800 Subject: [PATCH] add maven applications add maven apps --- .../fastjson/2.0.57/24.03-lts-sp1/Dockerfile | 35 ++++++++++++ .../2.0.57/24.03-lts-sp1/Fastjson2Demo.java | 25 +++++++++ .../2.0.57/24.03-lts-sp1/pom.xml.template | 49 ++++++++++++++++ Others/fastjson/README.md | 30 ++++++++++ Others/fastjson/doc/image-info.yml | 33 +++++++++++ Others/fastjson/doc/picture/logo.png | Bin 0 -> 12962 bytes Others/fastjson/meta.yml | 2 + .../1.72.0/24.03-lts-sp1/Dockerfile | 19 +++++++ Others/grpc-server/README.md | 53 ++++++++++++++++++ Others/grpc-server/doc/image-info.yml | 46 +++++++++++++++ Others/grpc-server/doc/picture/logo.png | Bin 0 -> 47365 bytes Others/grpc-server/meta.yml | 2 + Others/image-list.yml | 3 + .../6.2.6/24.03-lts-sp1/Dockerfile | 33 +++++++++++ .../24.03-lts-sp1/example/AppConfig.java | 9 +++ .../24.03-lts-sp1/example/HelloService.java | 10 ++++ .../6.2.6/24.03-lts-sp1/example/MainApp.java | 12 ++++ .../6.2.6/24.03-lts-sp1/pom.xml.template | 44 +++++++++++++++ Others/spring-framework/README.md | 46 +++++++++++++++ Others/spring-framework/doc/image-info.yml | 44 +++++++++++++++ Others/spring-framework/doc/picture/logo.png | Bin 0 -> 7345 bytes Others/spring-framework/meta.yml | 2 + 22 files changed, 497 insertions(+) create mode 100644 Others/fastjson/2.0.57/24.03-lts-sp1/Dockerfile create mode 100644 Others/fastjson/2.0.57/24.03-lts-sp1/Fastjson2Demo.java create mode 100644 Others/fastjson/2.0.57/24.03-lts-sp1/pom.xml.template create mode 100644 Others/fastjson/README.md create mode 100644 Others/fastjson/doc/image-info.yml create mode 100644 Others/fastjson/doc/picture/logo.png create mode 100644 Others/fastjson/meta.yml create mode 100644 Others/grpc-server/1.72.0/24.03-lts-sp1/Dockerfile create mode 100644 Others/grpc-server/README.md create mode 100644 Others/grpc-server/doc/image-info.yml create mode 100644 Others/grpc-server/doc/picture/logo.png create mode 100644 Others/grpc-server/meta.yml create mode 100644 Others/spring-framework/6.2.6/24.03-lts-sp1/Dockerfile create mode 100644 Others/spring-framework/6.2.6/24.03-lts-sp1/example/AppConfig.java create mode 100644 Others/spring-framework/6.2.6/24.03-lts-sp1/example/HelloService.java create mode 100644 Others/spring-framework/6.2.6/24.03-lts-sp1/example/MainApp.java create mode 100644 Others/spring-framework/6.2.6/24.03-lts-sp1/pom.xml.template create mode 100644 Others/spring-framework/README.md create mode 100644 Others/spring-framework/doc/image-info.yml create mode 100644 Others/spring-framework/doc/picture/logo.png create mode 100644 Others/spring-framework/meta.yml diff --git a/Others/fastjson/2.0.57/24.03-lts-sp1/Dockerfile b/Others/fastjson/2.0.57/24.03-lts-sp1/Dockerfile new file mode 100644 index 00000000..d4ba29d5 --- /dev/null +++ b/Others/fastjson/2.0.57/24.03-lts-sp1/Dockerfile @@ -0,0 +1,35 @@ +ARG BASE=openeuler/openeuler:24.03-lts-sp1 +FROM ${BASE} as BUILDER +ARG TARGETARCH +ARG BUILDARCH +ARG VERSION=2.0.57 +ARG JDK_VERSION=17.0.15_6 + +RUN dnf install -y maven gettext wget \ + && dnf clean all \ + && rm -rf /var/cache/dnf/* + +RUN if [ "$TARGETARCH" = "amd64" ]; then \ + BUILDARCH="x64"; \ + elif [ "$TARGETARCH" = "arm64" ]; then \ + BUILDARCH="aarch64"; \ + fi \ + && cd / \ + && wget https://mirrors.tuna.tsinghua.edu.cn/Adoptium/17/jdk/${BUILDARCH}/linux/OpenJDK17U-jdk_${BUILDARCH}_linux_hotspot_${JDK_VERSION}.tar.gz \ + && tar -zxvf OpenJDK17U-jdk_${BUILDARCH}_linux_hotspot_${JDK_VERSION}.tar.gz \ + && rm -f OpenJDK17U-jdk_${BUILDARCH}_linux_hotspot_${JDK_VERSION}.tar.gz + +ENV JAVA_HOME=/jdk-17.0.15+6 +ENV PATH=${JAVA_HOME}/bin:$PATH +ENV LANG="C.UTF-8" + +WORKDIR /home/fastjson +COPY Fastjson2Demo.java src/main/java/com/example/Fastjson2Demo.java +COPY pom.xml.template pom.xml.template + +ENV FAST_JSON_VERSION=${VERSION} + +RUN envsubst < pom.xml.template > pom.xml \ + && mvn clean compile -Dfile.encoding=UTF-8 + +CMD mvn exec:java -Dexec.mainClass="com.example.Fastjson2Demo" \ No newline at end of file diff --git a/Others/fastjson/2.0.57/24.03-lts-sp1/Fastjson2Demo.java b/Others/fastjson/2.0.57/24.03-lts-sp1/Fastjson2Demo.java new file mode 100644 index 00000000..374a639c --- /dev/null +++ b/Others/fastjson/2.0.57/24.03-lts-sp1/Fastjson2Demo.java @@ -0,0 +1,25 @@ +package com.example; + +import com.alibaba.fastjson2.JSON; + +public class Fastjson2Demo { + static class User { + public String name; + public int age; + + public User() {} + public User(String name, int age) { + this.name = name; + this.age = age; + } + } + + public static void main(String[] args) { + User user = new User("张三", 25); + String jsonString = JSON.toJSONString(user); + System.out.println("序列化结果:" + jsonString); + + User parsed = JSON.parseObject(jsonString, User.class); + System.out.println("反序列化结果:" + parsed.name + ", " + parsed.age); + } +} diff --git a/Others/fastjson/2.0.57/24.03-lts-sp1/pom.xml.template b/Others/fastjson/2.0.57/24.03-lts-sp1/pom.xml.template new file mode 100644 index 00000000..969fbd9c --- /dev/null +++ b/Others/fastjson/2.0.57/24.03-lts-sp1/pom.xml.template @@ -0,0 +1,49 @@ + + + 4.0.0 + + com.example + fastjson2-demo + 1.0-SNAPSHOT + + + UTF-8 + 17 + 17 + + + + + com.alibaba.fastjson2 + fastjson2 + ${FAST_JSON_VERSION} + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.11.0 + + ${maven.compiler.source} + ${maven.compiler.target} + + + + + org.codehaus.mojo + exec-maven-plugin + 3.1.0 + + com.example.Fastjson2Demo + + + + + + diff --git a/Others/fastjson/README.md b/Others/fastjson/README.md new file mode 100644 index 00000000..18a15431 --- /dev/null +++ b/Others/fastjson/README.md @@ -0,0 +1,30 @@ +# Quick reference + +- The official FASTJSON2 docker image. + +- Maintained by: [openEuler CloudNative SIG](https://gitee.com/openeuler/cloudnative). + +- Where to get help: [openEuler CloudNative SIG](https://gitee.com/openeuler/cloudnative), [openEuler](https://gitee.com/openeuler/community). + +# FASTJSON2 | openEuler +Current FASTJSON2 docker images are built on the [openEuler](https://repo.openeuler.org/). This repository is free to use and exempted from per-user rate limits. + +FASTJSON2 is a Java JSON library with excellent performance. + +# Supported tags and respective Dockerfile links +The tag of each `fastjson` docker image is consist of the version of `fastjson` and the version of basic image. The details are as follows +| Tag | Currently | Architectures | +|----------|-------------|------------------| +|[2.0.57-oe2403sp1](https://gitee.com/openeuler/openeuler-docker-images/blob/master/Others/fastjson/2.0.57/24.03-lts-sp1/Dockerfile)| FASTJSON2 2.0.57 on openEuler 24.03-LTS-SP1 | amd64, arm64 | + +# Usage +In this usage, users can select the corresponding `{Tag}` based on their requirements. + +- Pull the `openeuler/fastjson` image from docker + + ```bash + docker pull openeuler/fastjson:{Tag} + ``` + +# Question and answering +If you have any questions or want to use some special features, please submit an issue or a pull request on [openeuler-docker-images](https://gitee.com/openeuler/openeuler-docker-images). \ No newline at end of file diff --git a/Others/fastjson/doc/image-info.yml b/Others/fastjson/doc/image-info.yml new file mode 100644 index 00000000..b135e3f4 --- /dev/null +++ b/Others/fastjson/doc/image-info.yml @@ -0,0 +1,33 @@ +name: fastjson +category: others +description: Fastjson2 是阿里巴巴开源的高性能JSON处理库,是Fastjson的下一代版本,专注于提升性能、安全性和对新特性的支持。 +environment: | + 本应用在Docker环境中运行,安装Docker执行如下命令 + ``` + yum install -y docker + ``` +tags: | + fastjson镜像的Tag由其版本信息和基础镜像版本信息组成,详细内容如下 + + | Tag | Currently | Architectures | + |----------|-------------|------------------| + |[2.0.57-oe2403sp1](https://gitee.com/openeuler/openeuler-docker-images/blob/master/Others/fastjson/2.0.57/24.03-lts-sp1/Dockerfile)| FastJson2 2.0.57 on openEuler 24.03-LTS-SP1 | amd64, arm64 | + +download: | + 拉取镜像到本地 + ``` + docker pull openeuler/fastjson:{Tag} + ``` + +usage: | + - 启动容器 + ``` + docker run -it --rm openeuler/fastjson:{Tag} + ``` + +license: Apache-2.0 license +similar_packages: + - N/A +dependency: + - java + - maven \ No newline at end of file diff --git a/Others/fastjson/doc/picture/logo.png b/Others/fastjson/doc/picture/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..244e9cc8bdb300e268ed414f54f5212a3e722d76 GIT binary patch literal 12962 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 VKhyO^L;3#2VW?-OTYVLU`#;r-{3QSY literal 0 HcmV?d00001 diff --git a/Others/fastjson/meta.yml b/Others/fastjson/meta.yml new file mode 100644 index 00000000..e9be4f5b --- /dev/null +++ b/Others/fastjson/meta.yml @@ -0,0 +1,2 @@ + 2.0.57-oe2403sp1: + path: 2.0.57/24.03-lts-sp1/Dockerfile diff --git a/Others/grpc-server/1.72.0/24.03-lts-sp1/Dockerfile b/Others/grpc-server/1.72.0/24.03-lts-sp1/Dockerfile new file mode 100644 index 00000000..8be4f308 --- /dev/null +++ b/Others/grpc-server/1.72.0/24.03-lts-sp1/Dockerfile @@ -0,0 +1,19 @@ +ARG BASE=openeuler/openeuler:24.03-lts-sp1 +FROM ${BASE} as BUILDER + +ARG VERSION=1.72.0 +ARG WORK_HOME=/home/grpc-java + +RUN dnf install -y git wget java-1.8.0-openjdk java-1.8.0-openjdk-devel \ + && dnf clean all \ + && rm -rf /var/cache/dnf/* + +RUN git clone -b v${VERSION} --depth 1 https://github.com/grpc/grpc-java ${WORK_HOME} + +WORKDIR ${WORK_HOME}/examples + +RUN ./gradlew installDist + +EXPOSE 50051 + +CMD ["./build/install/examples/bin/hello-world-server"] diff --git a/Others/grpc-server/README.md b/Others/grpc-server/README.md new file mode 100644 index 00000000..46eeb57c --- /dev/null +++ b/Others/grpc-server/README.md @@ -0,0 +1,53 @@ +# Quick reference + +- The official Grpc Server docker image. + +- Maintained by: [openEuler CloudNative SIG](https://gitee.com/openeuler/cloudnative). + +- Where to get help: [openEuler CloudNative SIG](https://gitee.com/openeuler/cloudnative), [openEuler](https://gitee.com/openeuler/community). + +# Grpc Server | openEuler +Current Grpc Server docker images are built on the [openEuler](https://repo.openeuler.org/). This repository is free to use and exempted from per-user rate limits. + +In gRPC, a client application can directly call a method on a server application on a different machine as if it were a local object, making it easier for you to create distributed applications and services. +As in many RPC systems, gRPC is based around the idea of defining a service, specifying the methods that can be called remotely with their parameters and return types. +On the server side, the server implements this interface and runs a gRPC server to handle client calls. On the client side, the client has a stub (referred to as just a client in some languages) that provides the same methods as the server. + +Learn more about Grpc Server on [Grpc Website](https://grpc.io/)⁠. + +# Supported tags and respective Dockerfile links +The tag of each `grpc-server` docker image is consist of the version of `grpc-server` and the version of basic image. The details are as follows +| Tag | Currently | Architectures | +|----------|-------------|------------------| +|[1.72.0-oe2403sp1](https://gitee.com/openeuler/openeuler-docker-images/blob/master/Others/grpc-server/1.72.0/24.03-lts-sp1/Dockerfile)| Grpc Server 1.72.0 on openEuler 24.03-LTS-SP1 | amd64, arm64 | + +# Usage +In this usage, users can select the corresponding `{Tag}` based on their requirements. + +- Pull the `openeuler/grpc-server` image from docker + + ```bash + docker pull openeuler/grpc-server:{Tag} + ``` + +- Start a grpc-server instance + + ```bash + docker run -d --name my-grpc-server -p 50051:50051 openeuler/grpc-server:{Tag} + ``` + After `my-grpc-server` is started, access the service through `http://localhost:50051`. + +- View container running logs + + ```bash + docker logs -f my-grpc-server + ``` + +- To get an interactive shell + + ```bash + docker run -it --rm openeuler/grpc-server:{Tag} bash + ``` + +# Question and answering +If you have any questions or want to use some special features, please submit an issue or a pull request on [openeuler-docker-images](https://gitee.com/openeuler/openeuler-docker-images). \ No newline at end of file diff --git a/Others/grpc-server/doc/image-info.yml b/Others/grpc-server/doc/image-info.yml new file mode 100644 index 00000000..3eb0513d --- /dev/null +++ b/Others/grpc-server/doc/image-info.yml @@ -0,0 +1,46 @@ +name: grpc-server +category: others +description: gRPC-server是基于gRPC(Google Remote Procedure Call)框架 的服务端实现,用于处理客户端发来的远程调用请求。 +environment: | + 本应用在Docker环境中运行,安装Docker执行如下命令 + ``` + yum install -y docker + ``` +tags: | + grpc-server镜像的Tag由其版本信息和基础镜像版本信息组成,详细内容如下 + + | Tag | Currently | Architectures | + |----------|-------------|------------------| + |[1.72.0-oe2403sp1](https://gitee.com/openeuler/openeuler-docker-images/blob/master/Others/grpc-server/1.72.0/24.03-lts-sp1/Dockerfile)| gRPC-server 1.72.0 on openEuler 24.03-LTS-SP1 | amd64, arm64 | + +download: | + 拉取镜像到本地 + ``` + docker pull openeuler/grpc-server:{Tag} + ``` + +usage: | + - 启动容器 + ``` + docker run -d --name my-grpc-server -p 50051:50051 openeuler/grpc-server:{Tag} + ``` + `my-grpc-server`启动之后,通过`http://localhost:50051`访问服务。 + + - 容器测试 + + 查看运行日志 + ``` + docker logs -f my-grpc-server + ``` + + 运行启动shell会话 + ``` + docker run -it --rm openeuler/grpc-server:{Tag} bash + ``` + +license: Apache-2.0 license +similar_packages: + - Dubbo: 阿里巴巴开源的 RPC 框架,主要用于 Java 服务之间的通信。 +dependency: + - java + - maven \ No newline at end of file diff --git a/Others/grpc-server/doc/picture/logo.png b/Others/grpc-server/doc/picture/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..e29a3541acf1bfc33b7ca2ae2da10024579505bd GIT binary patch literal 47365 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 literal 0 HcmV?d00001 diff --git a/Others/grpc-server/meta.yml b/Others/grpc-server/meta.yml new file mode 100644 index 00000000..1789d554 --- /dev/null +++ b/Others/grpc-server/meta.yml @@ -0,0 +1,2 @@ +1.72.0-oe2403sp1: + path: 1.72.0/24.03-lts-sp1/Dockerfile diff --git a/Others/image-list.yml b/Others/image-list.yml index f9838c3e..7d0a0c1e 100644 --- a/Others/image-list.yml +++ b/Others/image-list.yml @@ -36,3 +36,6 @@ images: solr: solr wildfly: wildfly dubbo: dubbo + fastjson: fastjson + spring-framework: spring-framework + grpc-server: grpc-server diff --git a/Others/spring-framework/6.2.6/24.03-lts-sp1/Dockerfile b/Others/spring-framework/6.2.6/24.03-lts-sp1/Dockerfile new file mode 100644 index 00000000..a8f79079 --- /dev/null +++ b/Others/spring-framework/6.2.6/24.03-lts-sp1/Dockerfile @@ -0,0 +1,33 @@ +ARG BASE=openeuler/openeuler:24.03-lts-sp1 +FROM ${BASE} as BUILDER + +ARG TARGETARCH +ARG VERSION=6.2.6 +ARG JDK_VERSION=17.0.15_6 + +RUN if [ "$TARGETARCH" = "amd64" ]; then \ + BUILDARCH="x64"; \ + elif [ "$TARGETARCH" = "arm64" ]; then \ + BUILDARCH="aarch64"; \ + fi \ + && cd / \ + && yum install -y wget \ + && wget https://mirrors.tuna.tsinghua.edu.cn/Adoptium/17/jdk/${BUILDARCH}/linux/OpenJDK17U-jdk_${BUILDARCH}_linux_hotspot_${JDK_VERSION}.tar.gz \ + && tar -zxvf OpenJDK17U-jdk_${BUILDARCH}_linux_hotspot_${JDK_VERSION}.tar.gz \ + && rm -f OpenJDK17U-jdk_${BUILDARCH}_linux_hotspot_${JDK_VERSION}.tar.gz + +ENV JAVA_HOME=/jdk-17.0.15+6 +ENV PATH=${JAVA_HOME}/bin:$PATH + +WORKDIR /home/spring-framework +COPY example src/main/java/com/example +COPY pom.xml.template pom.xml.template + +ENV SPRING_VERSION=${VERSION} + +RUN dnf install -y gettext maven \ + && envsubst < pom.xml.template > pom.xml \ + && mvn clean compile dependency:build-classpath -Dmdep.outputFile=target/classpath.txt + +CMD CLASS_PATH="target/classes:$(cat target/classpath.txt)" && \ + java -cp "$CLASS_PATH" com.example.MainApp \ No newline at end of file diff --git a/Others/spring-framework/6.2.6/24.03-lts-sp1/example/AppConfig.java b/Others/spring-framework/6.2.6/24.03-lts-sp1/example/AppConfig.java new file mode 100644 index 00000000..2b8cc986 --- /dev/null +++ b/Others/spring-framework/6.2.6/24.03-lts-sp1/example/AppConfig.java @@ -0,0 +1,9 @@ +package com.example; + +import org.springframework.context.annotation.*; + +@Configuration +@ComponentScan("com.example") +public class AppConfig { + +} diff --git a/Others/spring-framework/6.2.6/24.03-lts-sp1/example/HelloService.java b/Others/spring-framework/6.2.6/24.03-lts-sp1/example/HelloService.java new file mode 100644 index 00000000..429261ea --- /dev/null +++ b/Others/spring-framework/6.2.6/24.03-lts-sp1/example/HelloService.java @@ -0,0 +1,10 @@ +package com.example; + +import org.springframework.stereotype.Component; + +@Component +public class HelloService { + public void sayHello() { + System.out.println("Hello, Spring Framework!"); + } +} diff --git a/Others/spring-framework/6.2.6/24.03-lts-sp1/example/MainApp.java b/Others/spring-framework/6.2.6/24.03-lts-sp1/example/MainApp.java new file mode 100644 index 00000000..c72324b1 --- /dev/null +++ b/Others/spring-framework/6.2.6/24.03-lts-sp1/example/MainApp.java @@ -0,0 +1,12 @@ +package com.example; + +import org.springframework.context.annotation.AnnotationConfigApplicationContext; + +public class MainApp { + public static void main(String[] args) { + AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class); + HelloService helloService = context.getBean(HelloService.class); + helloService.sayHello(); + context.close(); + } +} diff --git a/Others/spring-framework/6.2.6/24.03-lts-sp1/pom.xml.template b/Others/spring-framework/6.2.6/24.03-lts-sp1/pom.xml.template new file mode 100644 index 00000000..555ade97 --- /dev/null +++ b/Others/spring-framework/6.2.6/24.03-lts-sp1/pom.xml.template @@ -0,0 +1,44 @@ + + 4.0.0 + + com.example + spring-framework-demo + 1.0-SNAPSHOT + + + 17 + ${SPRING_VERSION} + + + + + + org.springframework + spring-context + ${spring.version} + + + + org.springframework + spring-aop + ${spring.version} + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.11.0 + + ${java.version} + ${java.version} + + + + + diff --git a/Others/spring-framework/README.md b/Others/spring-framework/README.md new file mode 100644 index 00000000..03ea708c --- /dev/null +++ b/Others/spring-framework/README.md @@ -0,0 +1,46 @@ +# Quick reference + +- The official Spring Framework docker image. + +- Maintained by: [openEuler CloudNative SIG](https://gitee.com/openeuler/cloudnative). + +- Where to get help: [openEuler CloudNative SIG](https://gitee.com/openeuler/cloudnative), [openEuler](https://gitee.com/openeuler/community). + +# Spring Framework | openEuler +Current Spring Framework docker images are built on the [openEuler](https://repo.openeuler.org/). This repository is free to use and exempted from per-user rate limits. + +The Spring Framework provides a comprehensive programming and configuration model for modern Java-based enterprise applications - on any kind of deployment platform. + +A key element of Spring is infrastructural support at the application level: Spring focuses on the "plumbing" of enterprise applications so that teams can focus on application-level business logic, without unnecessary ties to specific deployment environments. + +Learn more about Spring Framework on [Spring Framework Website](https://spring.io/projects/spring-framework)⁠. + +# Supported tags and respective Dockerfile links +The tag of each `spring-framework` docker image is consist of the version of `spring-framework` and the version of basic image. The details are as follows +| Tag | Currently | Architectures | +|----------|-------------|------------------| +|[6.2.6-oe2403sp1](https://gitee.com/openeuler/openeuler-docker-images/blob/master/Others/spring-framework/6.2.6/24.03-lts-sp1/Dockerfile)| Spring Framework 6.2.6 on openEuler 24.03-LTS-SP1 | amd64, arm64 | + +# Usage +In this usage, users can select the corresponding `{Tag}` based on their requirements. + +- Pull the `openeuler/spring-framework` image from docker + + ```bash + docker pull openeuler/spring-framework:{Tag} + ``` + +- Start a spring-framework instance + ```bash + docker run --rm openeuler/spring-framework:{Tag} + ``` + If instance started successfully you will receive a "Hello, Spring Framework!" reply. + +- To get an interactive shell + + ```bash + docker run -it --rm openeuler/spring-framework:{Tag} bash + ``` + +# Question and answering +If you have any questions or want to use some special features, please submit an issue or a pull request on [openeuler-docker-images](https://gitee.com/openeuler/openeuler-docker-images). \ No newline at end of file diff --git a/Others/spring-framework/doc/image-info.yml b/Others/spring-framework/doc/image-info.yml new file mode 100644 index 00000000..2868f52e --- /dev/null +++ b/Others/spring-framework/doc/image-info.yml @@ -0,0 +1,44 @@ +name: spring-framework +category: others +description: Spring Framework是一个开源的Java企业级开发框架,最初由Rod Johnson于2003年发布,目的是为了解决J2EE开发中存在的复杂性问题。 +environment: | + 本应用在Docker环境中运行,安装Docker执行如下命令 + ``` + yum install -y docker + ``` +tags: | + spring-framework镜像的Tag由其版本信息和基础镜像版本信息组成,详细内容如下 + + | Tag | Currently | Architectures | + |----------|-------------|------------------| + |[6.2.6-oe2403sp1](https://gitee.com/openeuler/openeuler-docker-images/blob/master/Others/spring-framework/6.2.6/24.03-lts-sp1/Dockerfile)| Spring Framework 6.2.6 on openEuler 24.03-LTS-SP1 | amd64, arm64 | + +download: | + 拉取镜像到本地 + ``` + docker pull openeuler/spring-framework:{Tag} + ``` + +usage: | + - 启动容器 + ``` + docker run -d --name my-spring-framework openeuler/spring-framework:{Tag} + ``` + + - 容器运行 + ``` + docker run --rm openeuler/spring-framework:{Tag} + ``` + 运行成功后回看到`Hello, Spring Framework!` + + - 运行启动shell会话 + ``` + docker run -it --rm openeuler/spring-framework:{Tag} bash + ``` + +license: Apache-2.0 license +similar_packages: + - N/A +dependency: + - java + - maven \ No newline at end of file diff --git a/Others/spring-framework/doc/picture/logo.png b/Others/spring-framework/doc/picture/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..61cd1a4782dfa09c710e8a2b2215b777341a0010 GIT binary patch literal 7345 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