PLCnext 控件上的 Java 应用程序
在 Java 9 中,一个名为 jlink 的新工具 被介绍了。它结合了模块并构建了一个全面的运行时映像。一方面,整个 32 位 ARM JDK 可以在 PLCnext Control 上运行。但是使用 jlink 和模块可以减少 Java 应用程序所需的资源。它创建一个包,其中包含您的应用程序所需的 JDK 的必要部分。
先决条件
- 适用于您的主机系统的 JDK
- 用于控制器的 JDK
可以找到许多平台的 OpenJDK 二进制文件,例如在 AdoptOpenJDK 上。对于本教程,我们选择了 Linux arm32 jdk-12.0.2+10 用于 Windows x64 主机系统的控制器及其挂件。我们正在使用 JDK 的以下位置:
C:
---Java
|
+---jdk-12.0.2
| ...
|
---jdk-12-ARM-32bit
...
创建应用模块
在这个例子中,我们只是打印一个 Hello World 在控制台上。使用 jlink 我们必须把这个小应用程序放到一个模块中。我在终端上的起点是一个名为“HelloWorld”的文件夹和一个具有以下结构的 src 文件夹。
HelloWorld
---src
---de.plcnext.hello
| module-info.java
|
---de
---plcnext
---hello
HelloWorld.java
这是我们在 HelloWorld.java 文件中的小代码示例:
package de.plcnext.hello;
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello PLCnext world!");
}
}
并且需要module-info.java来创建模块:
module de.pxc.hello { }
创建源文件夹后,我们编译我们的项目。为此,我们在终端上使用以下命令。
C:Javajdk-12.0.2binjavac.exe -d .modulesde.plcnext.hello .srcde.plcnext.hellodeplcnexthelloHelloWorld.java .srcde.plcnext.hellomodule-info.java
创建了一个模块文件夹和java类:
HelloWorld
---modules
---de.plcnext.hello
| module-info.class
|
---de
---plcnext
---hello
HelloWorld.class
要在主机系统上测试我们的模块,我们可以使用以下命令运行它:
C:Javajdk-12.0.2binjava.exe --module-path .modules -m de.plcnext.hello/de.plcnext.hello.HelloWorld
这应该输出 Hello PLCnext world!
.
jlink的使用方法
现在我们想在没有整个 300MB JDK 的情况下将它安装到我们的设备上。为此,我们在第一步中使用没有任何附加参数的 jlink。但首先我们需要更多信息,需要哪些附加模块。我们将通过使用 jdeps 分析我们的模块来发现这一点。
C:Javajdk-12.0.2binjdeps.exe --module-path ".modules" --add-modules "de.plcnext.hello"
这告诉我们,我们需要 java.base
除了我们的模块。作为 module-path
我们选择应用程序的路径和目标平台 JDK 的 jmod 路径。在这种情况下 C:Javajdk-12-ARM-32bitjmods
.
现在我们的 jlink 调用如下所示:
C:Javajdk-12.0.2binjlink.exe --module-path ".modules;C:Javajdk-12-ARM-32bitjmods" --add-modules "de.plcnext.hello,java.base" --output HelloWorldjre
结果是 HelloWorldjre
文件夹只有大约 45MB。我们将其复制到我们的控制器。以 /opt/plcnext/projects/java/
为例 .我们需要通过 chmod +x java
使 HelloWorldjre 二进制文件夹中的“java”文件可执行 并启动我们的模块
./java -m de.plcnext.hello/de.plcnext.hello.HelloWorld
它应该像 Hello PLCnext world!
之前一样运行应用程序和输出 .通过使用 jlink 的一些附加参数,您可以使用 --strip-debug
进一步精简包(在本例中减少到 28MB) , --no-header-files
, --no-man-pages
和 --compress=2
.哪里的压缩保险箱最多,但最终可能会损害性能。
工业技术