не упаковывать указанные ресурсы в банку - PullRequest
1 голос
/ 17 декабря 2009

У меня есть проект maven2, состоящий из корневого проекта (с упаковкой pom) и набора модулей, зависящих друг от друга. Проект представляет собой библиотеку с набором приложений, созданных поверх этой библиотеки. Теперь проблема.

Моя библиотека использует некоторые ресурсы, которые не могут быть упакованы в jar, а именно некоторые базы данных sqlite, и я не могу найти способ поместить его рядом с jar, а не внутри него, и добавить библиотеку таким образом к зависимым приложениям.

Спасибо. Есть идеи?

Ответы [ 3 ]

3 голосов
/ 17 декабря 2009

Создание пользовательской сборки для распространения проекта в виде архива (например, zip или tar.gz) - очевидный путь.

Чтобы настроить способ, которым плагин сборки создает ваши сборки, вам необходимо предоставить свой собственный дескриптор (это дает вам всю необходимую гибкость). Затем, чтобы собрать сборку как часть сборки, все, что вам нужно сделать, это привязать single или single-directory моджо к жизненному циклу сборки по умолчанию, как описано в Конфигурация и использование плагина документация.

Другим замечательным ресурсом является книга Сонатипа, в которой есть целая глава, посвященная сборкам: см. Глава 14. Сборки Maven .

1 голос
/ 17 декабря 2009

Похоже, вы могли бы использовать maven плагин сборки для создания дистрибутивного файла по вашему выбору (zip, jar, tar ...), который включал бы дополнительные ресурсы.

0 голосов
/ 17 декабря 2009

Вот важный факт из Maven: полное руководство по сборке, глава 8.3.2 :

При создании сборок как части вашего нормального процесса сборки, те сборочные архивы будут прикреплены к артефакт вашего основного проекта. это означает, что они будут установлены и развернутый рядом с основным артефактом, и затем разрешимы во многом так же. Каждый артефакт сборки учитывая те же основные координаты (groupId, artifactId и version) как основной проект. Однако эти артефакты являются вложениями, которые в Maven означает, что они являются производными работами основанный на некотором аспекте основного проект сборки. Чтобы предоставить пару примеры, исходные сборки содержат исходные данные для сборки проекта, и сборки с jar-зависимостями содержать классы проекта плюс его зависимостей. Прикрепленные артефакты разрешено обходить мавена требование одного проекта, один артефакт именно из-за этого Производное качество.

Так как сборки (обычно) приложенные артефакты, каждый должен иметь классификатор, чтобы отличить его от главный артефакт, в дополнение к нормальные координаты артефакта. От по умолчанию, классификатор такой же, как идентификатор дескриптора сборки. При использовании встроенной сборки дескрипторы, как указано выше, сборка идентификатор дескриптора обычно также как используемый идентификатор в descriptorRef для этого типа сборка.

Важно понимать, что, хотя большинство проектов Maven генерируют только один артефакт, возможно создать более одного и использовать координату классификатора, чтобы связать эти артефакты с одной и той же координатой GAV. В вашем случае вы захотите прикрепить «одиночную» цель модуля сборки, используя что-то похожее на это:

  <plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>2.2-beta-2</version>
    <dependencies>
      <dependency>
        <groupId>org.sonatype.mavenbook.assemblies</groupId>
        <artifactId>web-fragment-descriptor</artifactId>
        <version>1.0-SNAPSHOT</version>
      </dependency>
    </dependencies>
    <executions>
      <execution>
        <id>assemble</id>
        <phase>package</phase>
        <goals>
          <goal>single</goal>
        </goals>
        <configuration>
          <descriptorRefs>
            <descriptorRef>web-fragment</descriptorRef>
          </descriptorRefs>
        </configuration>
      </execution>
    </executions>
  </plugin>

Вы можете присоединить столько исполнений, сколько пожелаете, но если у вас есть несколько исполнений для определенного плагина, для каждого выполнения потребуется уникальный элемент "id". «Единственная» цель в плагине Maven Assembly делает то же самое, что и цель «Assembly», за исключением того, что она предназначена для привязки к жизненному циклу.

Другая часть вашего вопроса касается исключения определенных ресурсов из JAR, вы можете сделать это с помощью , исключая ресурсы в вашем POM .

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