Maven Uberjar как Maven Dependency

В настоящее время я работаю с устаревшим приложением, чей процесс создания плагинов требует добавления зависимостей примерно от 150 файлов jar, отличных от maven (я полагаю?). В идеале я хотел бы упаковать эти 150 банок в один JAR, поместить его в Artifactory и использовать его как зависимость от maven, чтобы моей команде было проще настроить свою среду разработки.

Я экспериментировал с one-jar, maven-assembly-plugin и maven-shade-plugin, который, кажется, просто создает одну банку, содержащую несколько других банок (т.е. распаковывает содержимое). Однако при добавлении этого jar-файла в качестве зависимости от maven maven не может разрешить содержимое/зависимости в этих «вложенных jar-файлах».

Приведенный ниже код является лишь примером того, что я пробовал; поэтому не стесняйтесь предлагать другие подходы.

<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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.company</groupId>
    <artifactId>some-jars</artifactId>
    <packaging>jar</packaging>
    <version>1.0.0</version>
    <name>someName</name>

    <properties>
        <jdk.version>1.8</jdk.version>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>com.mycompany.mypackage.MyMainClass</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.dstovall</groupId>
                <artifactId>onejar-maven-plugin</artifactId>
                <version>1.4.4</version>
                <executions>
                    <execution>
                        <configuration>

                            <binlibs>
                                <fileSet>
                                    <directory>${basedir}/jars</directory>
                                    <includes>
                                        <include>*</include>
                                    </includes>
                                </fileSet>
                            </binlibs>
                            <!-- Optional, default is false -->
                            <attachToBuild>true</attachToBuild>
                            <!-- Optional, default is "onejar" -->
                            <classifier>onejar</classifier>
                        </configuration>
                        <goals>
                            <goal>one-jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

    <pluginRepositories>
        <pluginRepository>
            <id>onejar-maven-plugin.googlecode.com</id>
            <url>http://onejar-maven-plugin.googlecode.com/svn/mavenrepo</url>
        </pluginRepository>
    </pluginRepositories>

</project>

person Jonathan Griffin    schedule 14.04.2015    source источник


Ответы (2)


Возможно, вы захотите рассмотреть подход BOM, принятый Spring IO Platform (http://platform.spring.io/platform/#quick-start), зависимость спецификации JBoss Java EE 6 в Maven (http://www.andygibson.net/blog/quickbyte/jboss-java-ee-6-spec-dependency-in-maven/ )

При использовании подхода BOM нет необходимости объединять все библиотеки в одну банку.

person Ian Lim    schedule 14.04.2015

У меня была такая же проблема некоторое время назад

По этой причине я реализовал maven-bulk-deploy, что упрощает реализовать подход BOM

Просто вы поместили свои банки в одну папку, выберите общую группу-идентификатор/версию (например, ту же, что и у вашего основного проекта), запустите плагин, и он создаст файл спецификации (например, pom) и развернет все банки в вашем активе. репо

Не стесняйтесь проверить / разветвить проект, чтобы попробовать его для решения вашей проблемы.

person bsorrentino    schedule 14.04.2015