Разве файл jar-архива, созданный `mvn package`, не содержит своих зависимостей и не указывает, какой файл .class содержит main ()? - PullRequest
0 голосов
/ 14 марта 2020

После запуска mvn package для упаковки скомпилированной java программы, содержащей main(),

  • Правильно ли, что созданный файл JAR не содержит зависимостей, поэтому при запуске JAR-файл, я все еще должен предоставить зависимости?

  • Правильно ли, что созданный JAR-файл не указывает, какой файл .class в нем содержит main() в качестве точки входа, поэтому при запуске файла jar мне все равно нужно указать файл .class, который содержит main()?

Спасибо.

1 Ответ

4 голосов
/ 14 марта 2020

Это зависит. По умолчанию ответ - да, он не содержит этой информации.

Но Maven можно настроить так, чтобы он содержал эти вещи. Чтобы также включить зависимости, можно использовать плагин Maven Assembly и привязать его к фазе пакета с параметром jar-with-dependencies, либо использовать плагин Maven Shade (также привязанный к фаза пакета). Они похожи, хотя я предпочитаю плагин Shade, так как он поддерживает так называемые преобразователи, которые могут обойти некоторые проблемы, возникающие при объединении нескольких jar-файлов в один.

Чтобы основной класс был определен как точка входа, вы можете настроить плагин компиляции Maven:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>2.3.1</version>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>my.main.Class</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
    </plugins>
</build>

Если настроено так, вам не нужно вызывать java -cp my.jar my.main.Class arguments, но вы можете просто вызвать его как java -jar my.jar arguments. Если у вас все еще есть дополнительные зависимости, вы бы назвали их с java -jar my.jar -cp dependencies/*.jar arguments.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...