Я пытаюсь построить толстую банку с помощью плагина maven shader. Я собираюсь немного в кругах, фиксируя maven и разбивая IntelliJ build, и наоборот.Плагин IntelliJ и Maven shader с несколькими модулями
Мой проект следующим образом (я ушел из раздела плагин, который содержит шейдера плагин):
- модуль-а - основной модуль проекта, содержит основной класс
- модуль-B - модуль, используемый
- модуль-C - модуль, используемый модулем
A POM:
http://maven.apache.org/xsd/maven-4.0.0.xsd "> 4.0.0
<groupId>com.my</groupId>
<artifactId>module-a</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>../module-b</module>
<module>../module-c</module>
</modules>
<dependencies>
<dependency>
<groupId>com.my</groupId>
<artifactId>module-b</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.my</groupId>
<artifactId>module-c</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.clapper</groupId>
<artifactId>grizzled-slf4j_2.11</artifactId>
<version>1.0.2</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.7</version>
</dependency>
<dependency>
<groupId>com.typesafe.akka</groupId>
<artifactId>akka-http-experimental_2.11</artifactId>
<version>2.0.3</version>
</dependency>
<dependency>
<groupId>com.typesafe.akka</groupId>
<artifactId>akka-http-core-experimental_2.11</artifactId>
<version>2.0.3</version>
</dependency>
<dependency>
<groupId>com.typesafe.akka</groupId>
<artifactId>akka-stream-experimental_2.11</artifactId>
<version>2.0.3</version>
</dependency>
<dependency>
<groupId>net.ceedubs</groupId>
<artifactId>ficus_2.11</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>com.typesafe</groupId>
<artifactId>config</artifactId>
<version>1.3.0</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.3</version>
</dependency>
<dependency>
<groupId>com.typesafe.akka</groupId>
<artifactId>akka-actor_2.11</artifactId>
<version>2.4.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>1.5</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<shadedArtifactAttached>true</shadedArtifactAttached>
<shadedClassifierName>allinone</shadedClassifierName>
<artifactSet>
<includes>
<include>*:*</include>
</includes>
</artifactSet>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>reference.conf</resource>
</transformer>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<manifestEntries>
<Main-Class>com.my.Service</Main-Class>
</manifestEntries>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
модуль B и C помам аналогичны (за исключением имен модулей)
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.my</groupId>
<artifactId>module-b</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<dependencies>
<dependency>
<groupId>com.typesafe.akka</groupId>
<artifactId>akka-actor_2.11</artifactId>
<version>2.4.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
Все модули находятся в том же каталоге на том же уровне. Хотя я могу построить через IntelliJ просто отлично, я не могу построить модуль-через maven, потому что он не может найти модули -b и -c. В общем, я не могу построить ничего, что ссылается на локальный проект, поскольку Maven их не найдет. Не имеет значения, пытаюсь ли я его использовать внутри IDE или из командной строки.
Строительство модуля-а я получаю:
[ERROR] Не удалось выполнить задачу по проекту модуля A: Не удалось разрешить зависимостей для проекта com.my:module-a:pom:1.0-SNAPSHOT : следующие артефакты не могут быть разрешены: com.my:module-b:jar:1.0-SNAPSHOT, com.my:module-c:jar:1.0-SNAPSHOT: Не удалось найти артефакт com.my:module- c: jar: 1.0-SNAPSHOT -> [Справка 1]
Я понимаю, что я, вероятно, испортил эти поры, пытаясь играть с зависимостями от ссылок модулей, но Каков правильный способ ссылки на локальный модуль в файле pom, без необходимости установки модуля в репозиторий?
Я читал, что должен создать четвертый родительский проект, который имеет модуль-a как родительский, и использовать этот проект для создания заштрихованной банки, но даже с этим подходом я не могу найти его для размещения модулей в тот же проект, он решает только модули репо.
похоже, что у вас есть модуль A, зависящий от себя в вашем списке зависимостей. посмотрите на artifactId вашей первой зависимости в модуле A pom - это «module-a». Я думаю, что это должен быть «модуль-c»? – adammtlx
Да, вы правы, я испортил это, когда был упрощен для публикации. Я исправил сообщение, спасибо. –