правильное использование исключающего термина в модуле сборки maven - PullRequest
1 голос
/ 06 августа 2011

short: мне нужно отфильтровать все .java файлы и каждую META-INF папку из набора jar-файлов и упаковать файлы классов и ресурсы из этих jar-файлов в один jar-файл.В настоящее время я использую maven-assembly-plugin, но попробую что-нибудь еще, если его можно легко интегрировать в процесс сборки maven.

long: я использую maven для управления различными этапами разработки своего инструмента. базовая стадия бесплатна, вторая имеет некоторые дополнительные функции, третья стадия - все функции)

Пока все работает нормально, я использую профили для добавления различных исходных каталогов в classpath и исходникиаккуратно скомпилированы в project.jar.

  • Первая проблема: .java источники, включенные в проект через профили, заканчиваются на project.jar.

Затем я использую maven-assembly-plugin для создания final.jar, который также содержит зависимости, и в конце использую launch4j для создания исполняемого файла для Windows (текущей целевой платформы).

  • Вторая проблема:различные META-INF части из jar зависимостей смешиваются в final.jar, и я бы хотел, чтобы все они были пропущены.

Я искал примеры assembly.xml с использованием тега <exclude>, но не нашел ни одного, который использовал бы мою комбинацию dependencySet и <exclude>*.java</exclude>. Я даже не уверен, что могу это сделать.

Вот мой файл Assembly.xml:

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
    <id>jar-with-dependencies</id>
    <formats>
        <format>jar</format>
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>
    <dependencySets>
        <dependencySet>
            <outputDirectory>/</outputDirectory>
            <useProjectArtifact>true</useProjectArtifact>
            <unpack>true</unpack>
            <scope>runtime</scope>
            <useDefaultExcludes>true</useDefaultExcludes>
            <!--<useTransitiveFiltering>true</useTransitiveFiltering>-->
            <!--<useStrictFiltering>true</useStrictFiltering>-->
            <excludes>
                <exclude>META-INF</exclude>
                <exclude>**/*.java</exclude>
                <exclude>*.java</exclude>
                <exclude>*:sources</exclude>
            </excludes>
        </dependencySet>
    </dependencySets>
</assembly>

Мои исследования на данный момент:

Я погуглил с example assembly.xml exclude java, но не смог найти примеров, которые охватывали бы мою проблему.(Я также много гуглил в последние дни, но не сохранил все, что нашел) Я прочитал http://maven.apache.org/plugins/maven-assembly-plugin/advanced-descriptor-topics.html, но не смог применить эти знания к моей проблеме.

Ответы [ 2 ]

1 голос
/ 03 сентября 2011

Хорошо, поэтому я понял это для себя.

сначала: отфильтровать java и другие исходные файлы из исходных частей, которые были включены с использованием профилей, которые я использую:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <mainClass>de.steamnet.oneClickWonder.awt.OCWController</mainClass>
                    </manifest>
                </archive>
                <excludes>
                    <exclude>**/*.java</exclude>
                    <exclude>**/*.form</exclude>
                </excludes>
            </configuration>
        </plugin>

Когда я начал использовать установщик, задача фильтрации META-INF по зависимостям исчезла, и теперь я могу просто поставлять несколько JAR-файлов со своими собственными META-INF.

Итак, как сказал Michael-O такой подход (использование профилей для добавления дополнительных исходных текстов) может быть неправильным, но это очень удобно, и я придерживаюсь этого.С тэгом exclude из плагина jar проблемы с исходными файлами, добавляемыми в последний jar, также исчезают.

0 голосов
/ 06 августа 2011

Это абсолютно неправильный путь. Никогда не создавайте больше одного основного баночка для каждого идентификатора артефакта. Вы должны использовать этот подход:

  1. создать для каждой основной банки один модуль.
  2. установить зависимости, скажем, от полного до базового и т. Д.
  3. теперь у вас есть варианты переупаковки ваших вещей. Вы либо используете плагин Shade, который будет включать артефакт так, как вам нужно / нужно, либо вы используете dependency:unpack-dependencies и помещаете материал в выходной каталог.

После этого вы получите «агрегированные» файлы jar. Делая это с профилями и плагином asm просто делает не масштаб.

После того, как вы сделали , создайте еще один модуль для tar.gz или вашего дистрибутива и зависите от этих основных jar-файлов и соберите вашу сборку. Вы сделали!

Viel Erfolg und Gruß nach Düren

...