如何在linux下用maven构建flink应用程序

kgsdhlau  于 2021-06-26  发布在  Flink
关注(0)|答案(1)|浏览(331)

我使用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.jar 以及 original-myflink-1.jar . 我搞不懂它们是什么。而且,看起来 BatchJob.java 以及 StreamingJob.java 有自己的jar文件。
那么文件是什么 myflink-1.jar ? 它是否包含两个java文件?如果我想得到一个jar文件,它只包含 StreamingJob.java ,我该怎么办?

wlp8pajw

wlp8pajw1#

jar文件是用于整个包的,通常聚合java类文件、一些元数据和资源文件。原因是 jar 是因为 <packaging>jar</packaging> 在pom.xml中定义。如果你扩大你的 jar 你会看到 java 在相应包中的类文件。
我们看到2的原因 jar 文件是由于添加了maven shade插件。第一个 jar ( flint-demo-1.0-SNAPSHOT.jar )从默认值生成 maven jar 插件和另一个( original-flint-demo-1.0-SNAPSHOT.jar )来自maven shade插件。
maven shade插件帮助我们生成uber jar/fat jar。我们还可以控制依赖关系,即包含/排除依赖关系,就像在这个示例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 shade插件的信息,可以点击这里和这里
如果你想排除任何文件,比如说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编译器插件的信息,请点击这里

相关问题