Почему дескриптор плагина 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. Я только что сделал это и обновлю этот ответ, если получу новую информацию.

Обновления

Я подозреваю, что это относится к формату 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. То есть "вот как вы это делаете, но вы должны сделать это другим способом".

Другие вопросы по тегам