我正在使用 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 文件?如果我想获取一个只包含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编译器插件的更多信息,请查看此处