【问题标题】:Maven Uberjar as Maven DependencyMaven Uberjar 作为 Maven 依赖项
【发布时间】:2015-04-14 21:22:26
【问题描述】:

我目前正在使用旧版应用程序,其构建插件的过程需要添加对大约 150 个非 maven(我相信是 ant?)jar 文件的依赖项。理想情况下,我想将这 150 个 jar 打包到一个 JAR 中,将其放在 Artifactory 上,并将其用作 maven 依赖项,以便我的团队可以更轻松地设置他们的开发环境。

我一直在尝试使用 one-jar、maven-assembly-plugin 和 maven-shade-plugin,这似乎只是创建了一个包含其他几个 jar 的 jar(即解压缩内容)。但是,当将该 jar 添加为 maven 依赖项时,maven 似乎无法解析这些“子 jars”中的内容/依赖项。

下面的代码只是我尝试过的一个例子;因此,请随时提出其他方法。

<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>

【问题讨论】:

    标签: java maven dependencies uberjar


    【解决方案1】:

    也许您可能需要考虑 Spring IO Platform (http://platform.spring.io/platform/#quick-start) 采用的 BOM 方法,Maven 中的 JBoss Java EE 6 规范依赖项 (http://www.andygibson.net/blog/quickbyte/jboss-java-ee-6-spec-dependency-in-maven/)

    通过使用 BOM 方法,无需将所有库捆绑到一个 jar 中。

    【讨论】:

      【解决方案2】:

      我之前也遇到过同样的问题

      出于这个原因,我实现了maven-bulk-deploy,它使 BOM 方法更容易实现

      只要你把你的 jars 放在一个文件夹中,选择一个 common-group-id/version(例如你的主项目相同)运行插件,它将创建一个 BOM 文件(即 pom)并部署所有 jars在您的资产回购中

      随时结帐/分叉项目以尝试解决您的问题

      【讨论】:

        猜你喜欢
        • 2023-03-10
        • 2021-01-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-12
        • 2023-04-11
        • 1970-01-01
        • 2012-03-06
        相关资源
        最近更新 更多