如何在 Linux 中使用 Maven 构建 Flink 应用程序



我正在使用 Maven 在 CentOS 服务器中管理我的自定义 Flink 应用程序。我是Java的初学者。

要构建一个空项目,我只是按照官方文档进行操作,这意味着我执行了以下命令:

mvn archetype:generate                               
-DarchetypeGroupId=org.apache.flink              
-DarchetypeArtifactId=flink-quickstart-java      
-DarchetypeVersion=1.10.0

它有效。我得到一个项目如下:

.
├── pom.xml
├── src
   └── main
       ├── java
       │   └── myflink
       │       ├── BatchJob.java
       │       └── StreamingJob.java
       └── resources
           └── log4j.properties

之后,我使用简单的示例StreamingJob.java修改文件WordCount

然后我执行mvn clean package来尝试构建我的 jar 文件。

据我了解,我应该得到两个jar文件,一个用于BatchJob.java,另一个用于StreamingJob.java(这是WordCount的示例(。

但是,在执行命令mvn clean package后,我得到了myflink-1.jaroriginal-myflink-1.jar。我不知道它们是什么。此外,BatchJob.javaStreamingJob.java似乎没有自己的 jar 文件。

那么文件myflink-1.jar是什么?它是否包含两个 java 文件?如果我想获取一个只包含StreamingJob.java的jar文件,我该怎么办?

jar 文件适用于整个包,通常聚合 java 类文件、一些元数据和资源文件。它之所以jar是因为 pom.xml 中定义的<packaging>jar</packaging>。如果展开jar文件,您将在各自的包中看到java类文件。

我们看到 2jar文件的原因是由于添加了 Maven 阴影插件。第一个jar(flint-demo-1.0-SNAPSHOT.jar(由默认的maven jar插件生成,另一个(original-flint-demo-1.0-SNAPSHOT.jar(由maven shade插件生成。

Maven Shade插件帮助我们生成超级罐子/胖罐子。我们还可以控制依赖关系,即包含/排除依赖关系,就像在这个示例 flink 项目中所做的那样。因此,当您运行mvn clean package时,您应该会看到一些依赖项被排除pom.xml如文件中定义的那样,如下所示

[INFO] --- maven-shade-plugin:3.1.1:shade (default) @ flint-demo ---
[INFO] Excluding org.slf4j:slf4j-api:jar:1.7.15 from the shaded jar.
[INFO] Excluding org.slf4j:slf4j-log4j12:jar:1.7.7 from the shaded jar.
[INFO] Excluding log4j:log4j:jar:1.2.17 from the shaded jar.
[INFO] Replacing original artifact with shaded artifact.

要了解有关 maven 阴影插件的更多信息,您可以查看 这里 和 这里

如果您想排除任何文件,即在您的情况下说 BatchJob,您可以使用 Maven 编译器插件。我在示例项目中看到maven编译器插件已经存在,因此您只需包含<excludes>

如下所示
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<excludes>
<exclude>com/flint/demo/BatchJob.java</exclude>
</excludes>
</configuration>
</plugin>

现在,当您执行mvn clean package并检查jar文件时,您应该看不到BatchJob类文件。

$ jar tf flint-demo-1.0-SNAPSHOT.jar
META-INF/MANIFEST.MF
META-INF/
com/
com/flint/
com/flint/demo/
com/flint/demo/StreamingJob.class
log4j.properties
META-INF/maven/
META-INF/maven/com.flint.demo/
META-INF/maven/com.flint.demo/flint-demo/
META-INF/maven/com.flint.demo/flint-demo/pom.xml
META-INF/maven/com.flint.demo/flint-demo/pom.properties

要了解有关Maven编译器插件的更多信息,请查看此处

相关内容

  • 没有找到相关文章

最新更新