有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java将库部署到Maven repo(当它依赖于非主流库时)

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

问题在于,它依赖于一些在任何Maven repos上都不存在的旧库。目前,这意味着pom文件必须使用依赖项的system范围。我还阅读了有关为项目创建本地存储库以安装第三方库的内容

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

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


共 (1) 个答案

  1. # 1 楼答案

    首先,我要说的是,您应该尽可能远离system范围。有关详细信息,请参阅this answer

    解决问题的一种方法实际上是在已部署的JAR中包含mavencentral中不存在的所有库。(假设您已在本地存储库中安装了这些库。)您可以使用^{}实现这一点,这是一个用于创建uber JAR的插件。属性^{}控制着色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将替换您的主工件,这将是要部署的JARThe POM that will be deployed will not contain the dependency entries for the artifacts that were included in the shaded JAR,因此,依赖于您部署的工件的客户机不会过渡地依赖于它们