当前位置: 首页 > 知识库问答 >
问题:

将库部署到 Maven 存储库(当它依赖于非 Maven 库时)

方建明
2023-03-14

我运行一个开源库,正在考虑让它完全接受Maven并将其上传到中央存储库,以便人们可以轻松地将其添加到他们的项目中。

问题在于,它依赖于几个较旧的库,这些库在任何 Maven 存储库中都不存在。目前,这意味着pom文件必须使用依赖项的系统范围。我还阅读了有关为项目创建本地存储库以安装第三方库的信息。

但是,我的印象是,当我将库部署到 Maven 存储库时,这两种方法都不能很好地工作。也就是说,如果它依赖于外部“系统”或本地存储库,那么当有人将我的库添加到他们的pom文件中时,他们实际上并没有完成。他们还必须下载第三方库并手动安装它们或将它们添加到自己的本地存储库中。

我希望这两个第三方库简单地包含在我部署到中央存储库的jar文件中。这样,如果有人将我的库添加到他们的pom文件中,他们就真的完成了,不必担心获得和安装第三方库。有可能做到吗?

共有1个答案

寿嘉悦
2023-03-14

首先,我首先要说的是,你应该尽可能地远离系统范围。您可以参考此答案以获取更多信息。

绕过您的问题的一种方法确实是在部署的JAR中包含Maven Central中不存在的所有库。(假设您已经在本地存储库中安装了这些库。)您可以使用maven-shade-plugin来做到这一点,这是一个用于创建uber jar的插件。属性artifactSet控制着色JAR中包含的内容。在下面的代码片段中,只包含两个依赖项groupId: artifactIdgroupId2: artifactId2

<plugin>
  <artifactId>maven-shade-plugin</artifactId>
  <version>2.4.3</version>
  <executions>
    <execution>
      <phase>package</phase>
      <goals>
        <goal>shade</goal>
      </goals>
      <configuration>
        <artifactSet>
          <includes>
            <include>groupId:artifactId</include>
            <include>groupId2:artifactId2</include>
          </includes>
        </artifactSet>
      </configuration>
    </execution>
  </executions>
</plugin>

默认情况下,阴影JAR将替换您的主要工件,这将是将要部署的JAR。将要部署的POM将不包含阴影JAR中包含的工件的依赖项,因此,依赖于您部署的工件的客户机将不能传递地依赖于它们。

 类似资料:
  • 我刚刚使用Maven,我需要从一个Ant项目上传一些库。为了开发这个任务,我有一个文件夹,其中包含许多“pom.xml”文件,这些文件引用了我希望使用Maven在Eclipse中添加到我的项目中的jar,还有另一个xml文件,即Ant项目本身。 欢迎所有想法。谢谢

  • 我对maven是新手,在将pom.xml中定义的依赖项下载到本地存储库时遇到了问题。正确下载pom.xml中定义的所有其他依赖项。此外,跨多个项目的其他依赖关系也运行良好。我使用的是maven 3.5.2和aws sdk 1.11.86 导致问题的依赖项是定义为的aws红移驱动程序- Maven存储库- 我的本地回购协议有以下内容- 我已经删除了本地文件。上次更新的文件,但无法解决此问题<有什么想

  • 因此,我在gitlab上有一个项目test-project(https://gitlab.com/group/test-project),这是一个我使用gitlab管道构建和部署的java应用程序。在构建阶段,我正在执行,包test-project.jar被推送到gitlab maven存储库(https://gitlab.com/group/test-project/-/packages)。 现

  • 例如,xxy-company-api-9.0.jar,这个jar可能需要abc-9.1.jar,commons-lang-1.0.jar等。当POM引用xxy-company工件时,它应该自动获取所有依赖的jar。有可能吗?怎么做? 备注 我们有第三方的JAR,我们没有与这些JAR相关联的源代码项目。我们从供应商、供应商或其他公司获得这些罐子。当我们收到这些罐子时,它会伴随着依赖的罐子等。 问题:

  • 我已经构建了Flink的快照版本,并希望将其部署到我的私有nexus存储库中。我尝试在pom中添加以下配置。xml 然后运行“mvn部署”命令。不幸的是,maven仍然试图将Flink的快照部署到官方存储库中: [错误]无法执行目标组织。阿帕奇。专家插件:maven部署插件:2.8.2:project上的部署(默认部署):未能部署工件:无法传输工件组织。阿帕奇。flink:force shadin