Я пытаюсь создать единую исполняемую банку из многопроектного проекта maven. Вот моя структура проекта, за которой следует то, что я пытался сделать с плагином сборки maven. Пойми, многие из нас могут намекнуть мне о решении (которое мне показалось бы наиболее распространенным, но я не мог найти в других цепочках обсуждений). Благодаря!Одиночная исполняемая банка для проекта с несколькими проектами maven
Структура меня есть (упрощенно):
MYAPP
…
<groupId>myApp</groupId> <artifactId>myApp</artifactId>
<version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging>
<name>myApp</name> <url>http://maven.apache.org</url>
…
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source> <target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>
<modules>
<module>../m1</module> <!-- jar-->
<module>../m2</module> <!-- war -->
<module>../subAppPomAggregationProject</module>
</modules>
<dependencies>
…
</dependencies>
</project>
Я пытался добавить ниже плагин к файлу MYAPP пом:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4</version>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<archive>
<manifest>
<mainClass>com.mypath.Main</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
Конечно, это не создайте банку для MyApp, но она создала то, что казалось объединенным банком в каждом модуле (!), хотя на самом деле не со всей зависимостью.
Я также попытался создать еще один uber-проект (jar) с любым модулем или зависимостью MyApp - тоже не работал. Должен ли я перечислять в uber-jar все модули, импортированные в MyApp (вместе с модулями, импортированными в subAppPomAggregationProject)? Не пытались это сделать, но если да, то в чем заключается цель агрегатора pom и зачем использовать двухэтапный подход к компиляции/агрегации?
Я не мог попробовать плагин maven-shade (не уверен, что это поможет), потому что для него требуется maven 3, и я в настоящее время использую 2.2.1 (не хотел бы обновлять и встряхивать вещи прямо перед моей почти вехой ...).
Добавить этот плагин в MyApp pom.xml (pom packaging), или создать другой проект (скажем, myappjar), в который я размещаю плагин? Если последнее, я просто добавляю зависимость MyApp в myappjar pom.xml? – Gera
Один артефакт на модуль. Так что не увлекайте агрегатор (также родитель должен быть создан до того, как ребенок так не может быть таким, даже если вы этого захотите) –
Когда я добавил плагин тени в MyApp pom.xml, я получил следующую ошибку: [INFO ] Замена оригинального артефакта с затененным артефактом. [INFO] Замена нуля на /home/.../MyApp/target/myapp-0.0.1-SNAPSHOT-shaded.pom [ERROR] BUILD ERROR [INFO] Ошибка при создании заштрихованной банки: null. Поэтому очевидно, что решение не работает. Попробуем второй вариант. – Gera