【问题标题】:Maven : How to package external jars(folder) in Maven projectMaven:如何在 Maven 项目中打包外部 jars(文件夹)
【发布时间】:2020-05-21 11:54:59
【问题描述】:

我在项目的构建路径中添加了一组外部 jar(数百个)以使其正常工作。 但是在打包时它失败了,因为这些 jar 不适用于 maven。

我看过很多文章,所有的解决方案(比如在系统路径中添加 jar)都是针对单个 jar 的。

<dependency>
<groupId>com.sample</groupId>
<artifactId>sample</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/Name_Your_JAR.jar</systemPath>
</dependency>

有什么方法可以将 jars(文件夹)组添加到项目的包装中?或我的项目可以成功构建的任何其他解决方案?


can we create a single jar containing all my jars inside and then use the system scope of maven

我已经尝试通过jar -cvf my_jar.jar * 创建 jar 并将这个 jar 放在系统范围内。但这对我不起作用。

【问题讨论】:

  • 你不想在引用它们之前将你的 jars 安装在本地 maven repo 中?虽然如果你有数百个,那会很痛苦......
  • @Maaaatt,是的,这就是他们实际上超过一百个的问题。
  • 所有这些 jars 都来自其他项目的 Maven 构建吗?还是那些外部依赖不是你自己构建的?
  • @khmarbaise,这些是客户端提供的 sdk 的其他一些依赖项。

标签: java maven


【解决方案1】:

坏消息:对于一个合适的 Maven 项目,您需要在 POM 中添加您使用的每个工件作为 &lt;dependency&gt;

好消息:我很怀疑这 100 罐都是 - 直接在您的源代码中使用 - 在 MavenCentral 等公共 Maven 存储库中不可用

因此,更好的策略是弄清楚您真正需要什么并在 MavenCentral 中找到它。然后 Maven 会为你找到所有的传递依赖。所以如果你真的需要 10 个 jars 并且所有其他 jars 只是你的依赖项的依赖项,只需添加这 10 个(来自 MavenCentral)就可以了。

【讨论】:

  • 实际上我使用的是外部 sdk,这些 jar 在公共 maven 存储库中不可用,而且 jar 的数量更多,超过 800 个。
  • 而你没有他们的 POM,也不知道哪个取决于哪个?
  • 然后我会编写一个脚本,将目录中的所有 jars 安装到本地存储库,并生成一个 XML sn-p,其中包含 800 多个依赖项条目,您可以将其复制/粘贴到项目中。
【解决方案2】:

我的解决方案:Maven 插件 addjar 让我们将所有 jar 添加到一个地方(在本例中为 projectdirectory/lib)。

this enables you to add these jar's in the final package(jar in my case) when you maven build, but to run locally you have to add those jar files directly in the classpath.

            <plugin>
                      <groupId>com.googlecode.addjars-maven-plugin</groupId>
                      <artifactId>addjars-maven-plugin</artifactId>
                      <version>1.0.5</version>
                      <executions>
                             <execution>
                                   <goals>
                                          <goal>add-jars</goal>
                                   </goals>
                                   <configuration>
                                          <resources>
                                                <resource>
                                                       <directory>${basedir}/lib</directory>
                                                </resource>
                                          </resources>
                                   </configuration>
                             </execution>
                      </executions>
            </plugin>

现在使用mvn clean install shade:shade创建一个遮荫罐

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-21
    • 2014-11-04
    • 1970-01-01
    • 1970-01-01
    • 2013-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多