Как создать приложение Flink с Maven в Linux - PullRequest
0 голосов
/ 27 мая 2020

Я использую Maven для управления своим пользовательским приложением Flink на сервере CentOS. И я новичок в Java.

Чтобы создать пустой проект, я просто выполнил официальный do c, что означает, что я выполнил команду ниже:

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?

1 Ответ

2 голосов
/ 27 мая 2020

Ваш jar-файл предназначен для всего вашего пакета, который обычно объединяет java файлов классов, некоторых метаданных, файлов ресурсов. Причина, по которой это jar, заключается в том, что <packaging>jar</packaging> определено в pom. xml. Если вы развернете файл jar, вы увидите оба файла классов java в соответствующем пакете.

Причина, по которой мы видим файл 2 jar, связана с добавлением Maven Shade Plugin. Первый 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 Compiler Plugin. Я вижу, что в примере проекта плагин компилятора 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 Compiler здесь

...