diff --git a/.github/workflows/nightly-build-artifact.yml b/.github/workflows/nightly-build-artifact.yml
index 0b9a23d5ae8f4a..c7397d98af9585 100644
--- a/.github/workflows/nightly-build-artifact.yml
+++ b/.github/workflows/nightly-build-artifact.yml
@@ -125,4 +125,4 @@ jobs:
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Push docker image
- run: ./mvnw -am -pl distribution/proxy-native -B -DskipTests -Dmaven.javadoc.skip=true -Dcheckstyle.skip=true -Dspotless.apply.skip=true -Pnative,docker.buildx.push.native -Dproxy.image.repository=${{ env.PROXY_NATIVE }} -Dproxy.image.tag=${{ github.sha }} clean package
+ run: ./mvnw -am -pl distribution/proxy-native -Pnative,docker.buildx.push.native -B -DskipTests -Dmaven.javadoc.skip=true -Dcheckstyle.skip=true -Dspotless.apply.skip=true -Dproxy.image.repository=${{ env.PROXY_NATIVE }} -Dproxy.image.tag=${{ github.sha }} clean package
diff --git a/distribution/proxy-native/Dockerfile b/distribution/proxy-native/Dockerfile
index 4452ec0d486c4d..cf52a856fa4730 100644
--- a/distribution/proxy-native/Dockerfile
+++ b/distribution/proxy-native/Dockerfile
@@ -14,23 +14,26 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
+FROM alpine AS prepare
-FROM busybox AS prepare
+ARG APP_NAME
+ENV LOCAL_PATH /opt/shardingsphere-proxy-native
-RUN mkdir -p /conf/
+ADD target/${APP_NAME}.tar.gz /opt
+RUN mv /opt/${APP_NAME} ${LOCAL_PATH}
FROM oraclelinux:9-slim
-
MAINTAINER ShardingSphere "dev@shardingsphere.apache.org"
+ARG NATIVE_IMAGE_NAME
ENV LOCAL_PATH /opt/shardingsphere-proxy-native
+ENV GRAALVM_HOME "/opt/graalvm-ce-java17-22.3.1"
+ENV PATH "$GRAALVM_HOME/bin:$PATH"
-bash <(curl -sL https://get.graalvm.org/jdk) -c espresso graalvm-ce-java17-22.3.1
-
-COPY --from=prepare /conf/ ${LOCAL_PATH}/conf
-
-ARG APP_NAME
-
-ADD target/${APP_NAME} ${LOCAL_PATH}/
+RUN microdnf install gzip -y && \
+ bash <(curl -sL https://get.graalvm.org/jdk) --to "/opt" -c espresso graalvm-ce-java17-22.3.1 && \
+ $GRAALVM_HOME/bin/gu remove native-image && \
+ microdnf clean all
-ENTRYPOINT ${LOCAL_PATH}/${APP_NAME} 3307 ${LOCAL_PATH}/conf
+COPY --from=prepare ${LOCAL_PATH} ${LOCAL_PATH}
+ENTRYPOINT ${LOCAL_PATH}/${NATIVE_IMAGE_NAME} 3307 ${LOCAL_PATH}/conf
diff --git a/distribution/proxy-native/pom.xml b/distribution/proxy-native/pom.xml
index 8470a33acdf686..0cfdb54739c0bc 100644
--- a/distribution/proxy-native/pom.xml
+++ b/distribution/proxy-native/pom.xml
@@ -28,10 +28,11 @@
shardingsphere-proxy-native-distribution
- apache-shardingsphere-proxy-native
- apache/shardingsphere-proxy-native
3.1.0
0.9.19
+ apache-shardingsphere-proxy-native
+ org.apache.shardingsphere.proxy.Bootstrap
+ apache/shardingsphere-proxy-native
@@ -65,37 +66,12 @@
runtime
+
+
+ apache-shardingsphere-${project.version}
+
-
- release
-
- apache-shardingsphere-${project.version}
-
-
- maven-assembly-plugin
-
-
- src/main/assembly/shardingsphere-proxy-native-binary-distribution.xml
-
-
-
-
- shardingsphere-proxy-native-bin
-
- single
-
- package
-
-
-
-
- net.nicoulaj.maven.plugins
- checksum-maven-plugin
-
-
-
-
native
@@ -120,8 +96,6 @@
${native.maven.plugin.version}
true
- ${native.image.name}
- org.apache.shardingsphere.proxy.Bootstrap
false
true
@@ -153,6 +127,27 @@
+
+ maven-assembly-plugin
+
+
+ src/main/assembly/shardingsphere-proxy-native-binary-distribution.xml
+
+
+
+
+ shardingsphere-proxy-native-bin
+
+ single
+
+ package
+
+
+
+
+ net.nicoulaj.maven.plugins
+ checksum-maven-plugin
+
@@ -181,7 +176,9 @@
build
--pull
--build-arg
- APP_NAME=${native.image.name}
+ APP_NAME=${project.build.finalName}-shardingsphere-proxy-native-bin
+ --build-arg
+ NATIVE_IMAGE_NAME=${imageName}
.
-t
${proxy.image.repository}:${proxy.image.tag}
@@ -245,7 +242,9 @@
--platform
${proxy.image.platform}
--build-arg
- APP_NAME=${native.image.name}
+ APP_NAME=${project.build.finalName}-shardingsphere-proxy-native-bin
+ --build-arg
+ NATIVE_IMAGE_NAME=${imageName}
.
@@ -265,7 +264,9 @@
--platform
${proxy.image.platform}
--build-arg
- APP_NAME=${native.image.name}
+ APP_NAME=${project.build.finalName}-shardingsphere-proxy-native-bin
+ --build-arg
+ NATIVE_IMAGE_NAME=${imageName}
.
-t
${proxy.image.repository}:${proxy.image.tag}
diff --git a/distribution/proxy-native/src/main/assembly/shardingsphere-proxy-native-binary-distribution.xml b/distribution/proxy-native/src/main/assembly/shardingsphere-proxy-native-binary-distribution.xml
index cbaa317e883e52..f06f3bd268ced5 100644
--- a/distribution/proxy-native/src/main/assembly/shardingsphere-proxy-native-binary-distribution.xml
+++ b/distribution/proxy-native/src/main/assembly/shardingsphere-proxy-native-binary-distribution.xml
@@ -26,15 +26,15 @@
- ../../proxy/bootstrap/src/main/resources/conf
- conf
- 0644
-
-
- ../../proxy/bootstrap/src/main/resources
+ ${project.build.directory}
- logback.xml
+ ${imageName}
+ /
+ 0755
+
+
+ ../../proxy/bootstrap/src/main/resources/conf
conf
0644
diff --git a/docs/document/content/user-manual/shardingsphere-proxy/startup/graalvm-native-image.cn.md b/docs/document/content/user-manual/shardingsphere-proxy/startup/graalvm-native-image.cn.md
index 90005df99b5933..c365aadc71e0d4 100644
--- a/docs/document/content/user-manual/shardingsphere-proxy/startup/graalvm-native-image.cn.md
+++ b/docs/document/content/user-manual/shardingsphere-proxy/startup/graalvm-native-image.cn.md
@@ -58,7 +58,7 @@ services:
3. 根据 https://www.graalvm.org/22.3/reference-manual/native-image/#prerequisites 的要求安装本地工具链。
-4. 如果需要构建 Docker Image, 确保 `docker-cli` 在系统环境变量内。
+4. 如果需要构建 Docker Image, 确保 `docker-ce` 已安装。
## 操作步骤
@@ -112,7 +112,7 @@ services:
./apache-shardingsphere-proxy-native 3307 ./custom/conf
```
-4. 如果需要构建 Docker Image, 在添加后存在 SPI 实现的依赖或第三方依赖后, 在命令行执行如下命令。
+4. 如果需要构建 Docker Image, 在添加存在 SPI 实现的依赖或第三方依赖后, 在命令行执行如下命令。
```shell
./mvnw -am -pl distribution/proxy-native -B -Pnative,docker.native -DskipTests -Dmaven.javadoc.skip=true -Dcheckstyle.skip=true -Dspotless.apply.skip=true -Drat.skip=true clean package
@@ -149,13 +149,13 @@ services:
- 你可以使用 https://www.graalvm.org/22.3/tools/ 提供的一系列命令行工具或可视化工具观察 GraalVM Native Image
的内部行为,并根据其要求使用 VSCode 完成调试工作。
- 如果你正在使用 IntelliJ IDEA 并且希望调试生成的 GraalVM Native Image,
- 你可以关注 https://blog.jetbrains.com/idea/2022/06/intellij-idea-2022-2-eap-5/#Experimental_GraalVM_Native_Debugger_for_Java
- 及其后继。
+ 如果你正在使用 IntelliJ IDEA 并且希望调试生成的 GraalVM Native
+ Image,你可以关注 https://blog.jetbrains.com/idea/2022/06/intellij-idea-2022-2-eap-5/#Experimental_GraalVM_Native_Debugger_for_Java
+ 及其后继。如果你使用的不是 Linux,则无法对 GraalVM Native Image 进行
+ Debug,请关注尚未关闭的 /~https://github.com/oracle/graal/issues/5648 。
-- 对于使用 `ShardingSphere Agent` 等 APM Java Agent 的情形,
- GraalVM 的 `native-image` 组件尚未完全支持在构建 Native Image 时使用
- javaagent,你需要关注尚未关闭的 /~https://github.com/oracle/graal/issues/1065。
+- 对于使用 `ShardingSphere Agent` 等 APM Java Agent 的情形, GraalVM 的 `native-image` 组件尚未完全支持在构建 Native
+ Image 时使用 javaagent,你需要关注尚未关闭的 /~https://github.com/oracle/graal/issues/1065。
- 以下部分采用 `Apache SkyWalking Java Agent` 作为示例,可用于跟踪 GraalVM 社区的对应 issue。
diff --git a/docs/document/content/user-manual/shardingsphere-proxy/startup/graalvm-native-image.en.md b/docs/document/content/user-manual/shardingsphere-proxy/startup/graalvm-native-image.en.md
index 0f03b9d88342aa..4567d06053b278 100644
--- a/docs/document/content/user-manual/shardingsphere-proxy/startup/graalvm-native-image.en.md
+++ b/docs/document/content/user-manual/shardingsphere-proxy/startup/graalvm-native-image.en.md
@@ -66,7 +66,7 @@ services:
3. Install the local toolchain as required by https://www.graalvm.org/22.3/reference-manual/native-image/#prerequisites.
-4. If you need to build a Docker Image, make sure `docker-cli` is in the system environment variables.
+4. If you need to build a Docker Image, make sure `docker-ce` is installed.
## Steps
@@ -123,8 +123,8 @@ services:
./apache-shardingsphere-proxy-native 3307 ./custom/conf
````
-4. If you need to build a Docker Image, after adding the dependencies of the SPI implementation or third-party
- dependencies, execute the following commands on the command line.
+4. If you need to build a Docker Image, execute the following command on the command line after adding dependencies that
+ exist for SPI implementation or third-party dependencies.
```shell
./mvnw -am -pl distribution/proxy-native -B -Pnative,docker.native -DskipTests -Dmaven.javadoc.skip=true -Dcheckstyle.skip=true -Dspotless.apply.skip=true -Drat .skip=true clean package
@@ -164,10 +164,10 @@ services:
- You can observe GraalVM Native Image using a series of command line tools or visualization tools available
at https://www.graalvm.org/22.3/tools/, and use VSCode to debug it according to its requirements.
- If you are using IntelliJ IDEA and want to debug the generated GraalVM Native Image,
- You can
+ If you are using IntelliJ IDEA and want to debug the generated GraalVM Native Image, You can
follow https://blog.jetbrains.com/idea/2022/06/intellij-idea-2022-2-eap-5/#Experimental_GraalVM_Native_Debugger_for_Java
- and its successors.
+ and its successors. If you are not using Linux, you cannot debug GraalVM Native Image, please pay attention
+ to /~https://github.com/oracle/graal/issues/5648 which has not been closed yet.
- In the case of using APM Java Agent such as `ShardingSphere Agent`,
GraalVM's `native-image` component is not yet fully supported when building Native Images
diff --git a/infra/util-groovy/pom.xml b/infra/util-groovy/pom.xml
index 6ddcfb9df74ee9..69111485a93c62 100644
--- a/infra/util-groovy/pom.xml
+++ b/infra/util-groovy/pom.xml
@@ -32,9 +32,5 @@
org.apache.groovy
groovy
-
- com.google.guava
- guava
-
diff --git a/infra/util-groovy/src/main/java/org/apache/shardingsphere/infra/util/groovy/expr/HotspotInlineExpressionParser.java b/infra/util-groovy/src/main/java/org/apache/shardingsphere/infra/util/groovy/expr/HotspotInlineExpressionParser.java
index caacaf5c6917e8..12dedfae2149fc 100644
--- a/infra/util-groovy/src/main/java/org/apache/shardingsphere/infra/util/groovy/expr/HotspotInlineExpressionParser.java
+++ b/infra/util-groovy/src/main/java/org/apache/shardingsphere/infra/util/groovy/expr/HotspotInlineExpressionParser.java
@@ -36,7 +36,7 @@
import java.util.stream.Collectors;
/**
- * Inline expression parser.
+ * Hotspot Inline expression parser.
*/
@RequiredArgsConstructor
public final class HotspotInlineExpressionParser {
diff --git a/infra/util/src/main/java/org/apache/shardingsphere/infra/util/expr/EspressoInlineExpressionParser.java b/infra/util/src/main/java/org/apache/shardingsphere/infra/util/expr/EspressoInlineExpressionParser.java
index bd1114329698d7..c097a9dee7b908 100644
--- a/infra/util/src/main/java/org/apache/shardingsphere/infra/util/expr/EspressoInlineExpressionParser.java
+++ b/infra/util/src/main/java/org/apache/shardingsphere/infra/util/expr/EspressoInlineExpressionParser.java
@@ -19,6 +19,7 @@
import groovy.lang.Closure;
import org.graalvm.polyglot.Context;
+import org.graalvm.polyglot.TypeLiteral;
import org.graalvm.polyglot.Value;
import java.net.URL;
@@ -43,12 +44,12 @@ public class EspressoInlineExpressionParser {
if (javaHome == null) {
throw new RuntimeException("Failed to determine the system's environment variable GRAALVM_HOME or JAVA_HOME!");
}
- System.setProperty("org.graalvm.home", javaHome);
URL resource = Thread.currentThread().getContextClassLoader().getResource("espresso-need-libs");
assert null != resource;
String dir = resource.getPath();
String javaClasspath = String.join(":", dir + "/groovy.jar", dir + "/guava.jar", dir + "/shardingsphere-infra-util.jar");
POLYGLOT = Context.newBuilder().allowAllAccess(true)
+ .option("java.Properties.org.graalvm.home", javaHome)
.option("java.MultiThreaded", "true")
.option("java.Classpath", javaClasspath)
.build();
@@ -70,7 +71,7 @@ public static String handlePlaceHolder(final String inlineExpression) {
return POLYGLOT.getBindings("java")
.getMember("org.apache.shardingsphere.infra.util.expr.InlineExpressionParser")
.invokeMember("handlePlaceHolder", inlineExpression)
- .as(String.class);
+ .asString();
}
/**
@@ -78,10 +79,10 @@ public static String handlePlaceHolder(final String inlineExpression) {
*
* @return result list
*/
- @SuppressWarnings("unchecked")
public List splitAndEvaluate() {
- List splitAndEvaluate = espressoInlineExpressionParser.invokeMember("splitAndEvaluate").as(List.class);
- // GraalVM Truffle Espresso CE 22.3.1 has a different behavior for generic List than Hotspot.
+ List splitAndEvaluate = espressoInlineExpressionParser.invokeMember("splitAndEvaluate").as(new TypeLiteral>() {
+ });
+ // GraalVM Truffle Espresso 22.3.1 has a different behavior for generic List than Hotspot.
return splitAndEvaluate.size() == 0 ? Collections.emptyList() : splitAndEvaluate;
}