У меня есть проект, который производит три фляга файлов:Maven: Три банки в одном проекте. Попытка использовать сборку, но не получает pom.xml и pom.properties внедренный в банках
- server.jar: Это содержит все классы и ресурсы. Стандартная баночка
- Client.jar: Это содержит только несколько внешних классов и ресурсов.
- ServerSDK.jar: содержит все классы, ресурсы, классы тестов и другие файлы конфигурации.
Я решил сделать все три банки в одном проекте, поэтому изменение в любом из источников порождает сборку Дженкинса и развертывает все три одновременно. Я строю Server.jar как мой стандартный pom.xml
jar. Затем я использую сборки для сборки Client.jar и ServerSDK.jar.
У меня есть сборки, которые строят два других баночки, и все это 99% от того, как мне это нравится, но я хочу немного потрудиться.
- Мы добавили несколько записей в наш файл
MANIFEST.MF
, чтобы включить информацию о конструкции Jenkins и информацию о проекте. - В стандартной коробке Maven
pom.xml
иpom.properties
встроены в каталогMETA-INF
.
Первый, который мне удалось сделать через конфигурацию <assembly>
в моем maven-assembly-plugin
. Второй, который, похоже, не работает, хотя у меня есть <addMavenDescriptor>
, установленный в true
в моей конфигурации <assembly>
.
Вот мой maven-assembly-plugin
раздел в моем pom.xml
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.6</version>
<configuration>
<archive>
<addMavenDescriptor>true</addMavenDescriptor>
<manifestSections>
<manifestSection>
<name>Build-Information</name>
<manifestEntries>
<Project-Name>${env.JOB_NAME}</Project-Name>
<Build-Number>${env.BUILD_NUMBER}</Build-Number>
<SVN-Revision>${env.SVN_REVISION}</SVN-Revision>
</manifestEntries>
</manifestSection>
<manifestSection>
<name>Module-Information</name>
<manifestEntries>
<Group-ID>${project.groupId}</Group-ID>
<Artifact-ID>${project.artifactId}</Artifact-ID>
<Version>${project.version}</Version>
</manifestEntries>
</manifestSection>
</manifestSections>
</archive>
</configuration>
<executions>
<execution>
<id>Client</id>
<configuration>
<finalName>Client</finalName>
<appendAssemblyId>true</appendAssemblyId>
<descriptors>
<descriptor>src/assembly/client.xml</descriptor>
</descriptors>
</configuration>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
The <manifestSections>
работы просто отлично, но не похоже, работает ли <addMavenDescriptor>
хотя я явно установить его true
.
Согласно документации на maven-archiver-plugin:
ли созданный архив будет содержать эти два Maven файла:
- Файл POM, расположенные в архиве в
META-INF/maven/${groupId}/${artifactId}/pom.xml
pom.properties
файл, находящийся в архиве в форматеMETA-INF/maven/${groupId}/${artifactId}/pom.properties
Значение по умолчанию:
true
.
Согласовывающ maven-assembly-plugin
страницы:
<archive>
Это набор инструкций для архива строителя, особенно для создания .jar файлов.Он позволяет указать файл манифеста для банки в дополнение к другим параметрам. См. Maven Archiver Reference
Есть ли что-то простое, что я здесь отсутствует?
Хм, ваша конфигурация выглядит правильно на первый взгляд. Я попытаюсь воспроизвести что-то. Обратите внимание, что вместо того, чтобы иметь одно проектное здание 3 JAR, было бы предпочтительнее разделить его на 3 модуля многомодульного проекта Maven. Таким образом, вы по-прежнему сохраняете свое требование о создании и развертывании всего этого в Jenkins, когда изменения происходят в любом из модулей, и это рекомендуемый подход Maven здесь. Затем вы можете добавить 4-й модуль, делающий окончательную сборку. – Tunaki
Я всегда думал о модулях, как компиляцию их собственных файлов классов - как уха или войны. Здесь все три банка используют одни и те же файлы классов. Двое из них используют все из них, а один использует подмножество. Мне нужно будет снова прочитать модули и посмотреть, как это делается. –