Java 函数包
note
如果你计划打包并分发你的函数供他人使用,你有义务正确地许可和版权保护你自己的代码。记得为你代码使用的所有库以及你的分发添加许可和版权信息。
如果您使用NAR方法,NAR插件会自动在生成的NAR包中创建一个DEPENDENCIES
文件,包括您函数所有库的适当许可和版权。
关于运行时Java版本,请根据您的目标Pulsar版本参考Pulsar Runtime Java Version Recommendation。
有两种打包Java函数的方法:
打包为JAR
要将Java函数打包为JAR,请完成以下步骤。
-
创建一个带有pom文件的新maven项目。在以下代码示例中,
mainClass
的值是您的包名。<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>java-function</groupId>
<artifactId>java-function</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.apache.pulsar</groupId>
<artifactId>pulsar-functions-api</artifactId>
<version>4.0.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>org.example.test.ExclamationFunction</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>assembly</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.11.0</version>
<configuration>
<release>17</release>
</configuration>
</plugin>
</plugins>
</build>
</project> -
打包你的Java函数。
mvn package
Java函数打包后,会自动创建一个
target
目录。打开target
目录,检查是否存在类似于java-function-1.0-SNAPSHOT.jar
的JAR包。 -
使用以下命令运行Java函数。
./bin/pulsar-admin functions localrun \
--classname org.example.test.ExclamationFunction \
--jar $PWD/target/java-function-1.0-SNAPSHOT.jar \
--inputs persistent://public/default/my-topic-1 \
--output persistent://public/default/test-1 \
--tenant public \
--namespace default \
--name JavaFunction以下日志表明Java函数已成功启动。
...
07:55:03.724 [main] INFO org.apache.pulsar.functions.runtime.ProcessRuntime - Started process successfully
...
打包为NAR
要将Java函数打包为NAR,请完成以下步骤。
-
使用pom文件创建一个新的maven项目。
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>java-function</groupId>
<artifactId>java-function</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.apache.pulsar</groupId>
<artifactId>pulsar-functions-api</artifactId>
<version>4.0.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.nifi</groupId>
<artifactId>nifi-nar-maven-plugin</artifactId>
<version>1.5.0</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.11.0</version>
<configuration>
<release>17</release>
</configuration>
</plugin>
</plugins>
</build>
</project>您还必须创建一个
resources/META-INF/services/pulsar-io.yaml
文件。在以下代码示例中,functionClass
的值是您的函数类名。name
是当函数作为内置函数部署时使用的名称。name: java-function
description: my java function
functionClass: org.example.test.ExclamationFunction -
打包你的Java函数。
mvn package
Java函数打包后,会自动创建一个
target
目录。打开target
目录,检查是否存在类似于java-function-1.0-SNAPSHOT.nar
的NAR包。 -
使用以下命令运行Java函数。
./bin/pulsar-admin functions localrun \
--jar $PWD/target/java-function-1.0-SNAPSHOT.nar \
--inputs persistent://public/default/my-topic-1 \
--output persistent://public/default/test-1 \
--tenant public \
--namespace default \
--name JavaFunction以下日志表明Java函数已成功启动。
...
07:55:03.724 [main] INFO org.apache.pulsar.functions.runtime.ProcessRuntime - Started process successfully
...