Почему дескриптор плагина maven-assembly-plugin говорит <! - TODO: формат jarjar был бы лучше -> на своем примере сайта?
Что-то, что всегда удивляло меня с помощью maven-assembly-plugin, это то, что файл примера jar-with-dependencies на веб-сайте apache содержит комментарий TODO о формате jarjar.
Является ли это просто артефактом кода, который продолжает копироваться бесконечно, или есть какая-то реальная причина этого TODO в файле примера?
2 ответа
В документации говорится следующее
Используйте jar-with-dependencies в качестве descriptorRef конфигурации вашей сборки-плагина, чтобы создать JAR-файл, который содержит двоичный вывод вашего проекта вместе с распакованными зависимостями.
Так jar-with-dependencies
создает один JAR-файл всех файлов классов вашего проекта, а также всех распакованных файлов классов ваших зависимостей.
Я предполагаю, что "jarjar" относится к чему-то подобному плагину Spring Boot Maven: он также создает один JAR-файл, но зависимости включены в их исходные JAR-файлы, а не распаковываются. В отличие от подхода к плагину сборки, для этого требуется пользовательский загрузчик классов.
Тем не менее, вам, вероятно, следует задать этот вопрос в списке рассылки Maven. Я только что сделал это и обновлю этот ответ, если получу новую информацию.
Обновления
- В результате выяснилось, что эта конкретная часть веб-страницы (включая TODO) была добавлена более 10 лет назад. Видимо, с тех пор TODO не изменился.
Я подозреваю, что это относится к формату jarjar, который перепаковывает библиотеки Java и встраивает их в ваш собственный дистрибутив, чтобы не было зависимостей.
см: jarjar
В контексте файла примера, который содержит:
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
<!-- TODO: a jarjar format would be better -->
<id>jar-with-dependencies</id>
<formats>
<format>jar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
<dependencySet>
<outputDirectory>/</outputDirectory>
<useProjectArtifact>true</useProjectArtifact>
<unpack>true</unpack>
<scope>runtime</scope>
</dependencySet>
</dependencySets>
</assembly>
я думаю todo
означает, что именно так и делается этот определенный метод, но лучше использовать jarjar. То есть "вот как вы это делаете, но вы должны сделать это другим способом".