Подтвердить что ты не робот

Maven - добавить jar-with-dependencies в качестве зависимости

Вопрос..
Я хотел бы добавить зависимость от флага Maven, упакованного с его зависимостями.

Подробнее..
У меня есть мультимодульный проект Maven, в котором один из модулей зависит от собственных библиотек и тому подобного. Как часть сборки, он упаковывает свои зависимости в jar-with-dependencies, как показано ниже:

<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>2.4</version>
    <configuration>
        <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
        <archive>
            <manifest>
                <mainClass>${mainClass}</mainClass>
            </manifest>
        </archive>
    </configuration>
    <executions>
        <execution>
            <id>make-assembly</id>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
</plugin>

Все хорошо, я получаю две банки при создании:

seaniscool-0.0.1-SNAPSHOT.jar
seaniscool-0.0.1-SNAPSHOT-jar-with-dependencies.jar

Однако я хотел бы использовать этот артефакт в другом модуле того же проекта. Если я просто добавлю модуль в качестве зависимости, я получаю банку без встроенных библиотек.

Я мог бы дублировать конфигурацию сборки, чтобы включить собственные библиотеки во 2-й модуль, также не очень обширный, но предпочел бы не делать этого.

Любые идеи о том, как я могу добавить jar-with-dependencies в качестве зависимости и, следовательно, зависеть от включенных библиотек?

Некоторые мысли..
Я знаю, что могу создать отдельную банку с тестовыми классами, которые Maven может ссылаться:

В первом модуле:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.2</version>
    <executions>
        <execution>
            <goals>
                <goal>test-jar</goal>
            </goals>
        </execution>
    </executions>
</plugin>

В 2-м модуле:

<dependency>
    <groupId>my.group.id</groupId>
    <artifactId>my.artifact.id</artifactId>
    <version>my.version</version>
    <type>test-jar</type>
    <scope>test</scope>
</dependency>

Возможно, эта концепция может переместиться?

4b9b3361

Ответ 1

Вы можете сделать это с помощью классификатора maven. Classfiers используются, поэтому модуль maven может создавать несколько артефактов из одного источника. Примерами являются версия jdk1.6 или 1.7 или даже исходная и javadoc jars maven могут создавать.

Итак, попробуйте следующее:

<dependency>
  <groupId>yourID</groupId>
  <artifactId>seaniscool</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <classifier>jar-with-dependencies</classifier>
</dependency>

Если вы хотите переименовать classfier в более качественное имя, например, сNative или полным, или что-нибудь еще, посмотрите плагин maven shade, который также может создавать банки с зависимостями но позволяет еще немного контролировать.

Ответ 2

Просто обратите внимание на ответ @msczalbach

Собственно, даже с standarad maven-jar-plugin вы можете дать какой-либо суффикс для сгенерированной банки. Просто используйте конфигурацию.

например:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
</plugin>
<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <descriptorRefs>
            <descriptorRef>self-contained</descriptorRef>
        </descriptorRefs>
    </configuration>
</plugin>