微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为另一个操作系统创建一个 Spring Native 应用程序

如何解决为另一个操作系统创建一个 Spring Native 应用程序

我正在 Linux 机器上构建 Spring Native 应用程序。构建在 Linux 上运行的可执行文件是可行的。

如何在 Windows 本地运行的同一台机器上构建可执行文件?一种选择是创建一个 Docker image,但是否还有一种方法可以构建一个 Windows 可执行文件,该可执行文件在使用 Linux 机器作为构建环境时无需 Docker 即可运行?

我的设置:

  • GraalVM CE 21.1.0 (Java 11) 已安装,DocumentPATH 已相应设置

  • JAVA_HOME

pom.xml
  • 放置在子文件<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.5.1</version> <relativePath/> </parent> <groupId>com.example</groupId> <artifactId>demo</artifactId> <version>0.0.1-SNAPSHOT</version> <name>demo</name> <description>Demo project for Spring Native</description> <properties> <java.version>11</java.version> <repackage.classifier>exec</repackage.classifier> <native-buildtools.version>0.9.0</native-buildtools.version> <spring-native.version>0.10.0</spring-native.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.experimental</groupId> <artifactId>spring-native</artifactId> <version>${spring-native.version}</version> </dependency> <dependency> <groupId>org.graalvm.buildtools</groupId> <artifactId>junit-platform-native</artifactId> <version>${native-buildtools.version}</version> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <classifier>${repackage.classifier}</classifier> <image> <builder>paketobuildpacks/builder:tiny</builder> <env> <BP_NATIVE_IMAGE>true</BP_NATIVE_IMAGE> </env> </image> </configuration> </plugin> <plugin> <groupId>org.springframework.experimental</groupId> <artifactId>spring-aot-maven-plugin</artifactId> <version>${spring-native.version}</version> <executions> <execution> <id>generate</id> <goals> <goal>generate</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>org.graalvm.buildtools</groupId> <artifactId>native-maven-plugin</artifactId> <version>${native-buildtools.version}</version> <executions> <execution> <id>build-native</id> <phase>package</phase> <goals> <goal>build</goal> </goals> </execution> </executions> </plugin> </plugins> </build> <repositories> <repository> <id>spring-releases</id> <name>Spring Releases</name> <url>https://repo.spring.io/release</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>spring-releases</id> <name>Spring Releases</name> <url>https://repo.spring.io/release</url> <snapshots> <enabled>false</enabled> </snapshots> </pluginRepository> </pluginRepositories> </project> 中的单个应用程序类:
src/main/java/demo

解决方法

目前 GraalVM 中没有选项可以为不同的操作系统交叉编译应用程序。 其技术原因是,在构建过程中,来自 JDK 的本机代码链接到可执行文件中,这显然是特定于平台的,而且特定于操作系统的代码路径记录在输出二进制文件中,其他操作系统的代码可能不会,因为它没有在分析过程中执行或查看。

因此目前无法在 Linux 上生成 Windows 可执行文件。您可以探索的选项有:

我认为在云机器上构建的最后一种选择是对最终用户最友好的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。