Java Maven:我的项目有一个不在任何Maven repo(系统范围)中的依赖项。它是否包含在我的最后一个罐子中?

Java Maven:我的项目有一个不在任何Maven repo(系统范围)中的依赖项。它是否包含在我的最后一个罐子中?,java,maven-2,maven,dependencies,Java,Maven 2,Maven,Dependencies,因此,我的maven项目依赖于一个不在任何maven存储库中的jar。因此,我需要使用系统作用域将这个本地文件包含在我的maven类路径中。问题是:当我构建最后一个jar来分发我的库时,我确实需要以某种方式将这种依赖性包含在其中。这些类可以被提取出来,然后与我的库类捆绑在一起,或者jar可以以某种方式包含在我的库jar中。我甚至不确定jar中的后一个jar在Java中是否可行 那么我应该如何处理这个问题呢?Maven会接受我的系统范围依赖并为我解决这个问题吗?我该怎么办 谢谢 不,不会。这些依赖

因此,我的maven项目依赖于一个不在任何maven存储库中的jar。因此,我需要使用系统作用域将这个本地文件包含在我的maven类路径中。问题是:当我构建最后一个jar来分发我的库时,我确实需要以某种方式将这种依赖性包含在其中。这些类可以被提取出来,然后与我的库类捆绑在一起,或者jar可以以某种方式包含在我的库jar中。我甚至不确定jar中的后一个jar在Java中是否可行

那么我应该如何处理这个问题呢?Maven会接受我的系统范围依赖并为我解决这个问题吗?我该怎么办


谢谢

不,不会。这些依赖项仅用于编译和可传递依赖项解析。您的库消费者也应该拥有这个jar。 但是,您可以使用汇编插件将jar的类重新打包到您的工件中

或者,标准方法:然后发布您的工件,创建一个用于部署的公共存储库。您还可以在其中部署jar

UDPATE:为shade插件而不是程序集添加示例

  <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>1.4</version>
        <executions>
          <execution>
                <phase>package</phase>
                <goals>
                  <goal>shade</goal>
                </goals>
                <configuration>
                  <artifactSet>
                        <includes>
                          <include>legacy-jar.groupId:legacyJar</include>
                        </includes>
                  </artifactSet>
                </configuration>
          </execution>
        </executions>
  </plugin>

不,不会的。这些依赖项仅用于编译和可传递依赖项解析。您的库消费者也应该拥有这个jar。 但是,您可以使用汇编插件将jar的类重新打包到您的工件中

或者,标准方法:然后发布您的工件,创建一个用于部署的公共存储库。您还可以在其中部署jar

UDPATE:为shade插件而不是程序集添加示例

  <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>1.4</version>
        <executions>
          <execution>
                <phase>package</phase>
                <goals>
                  <goal>shade</goal>
                </goals>
                <configuration>
                  <artifactSet>
                        <includes>
                          <include>legacy-jar.groupId:legacyJar</include>
                        </includes>
                  </artifactSet>
                </configuration>
          </execution>
        </executions>
  </plugin>

这就是你想要的吗?

这就是你想要的吗?

还有第二个选择。将jar放入存储库,如下所述:

和您的在线存储库

允许客户端访问存储库,并将legacy.jar作为正常依赖项使用


这要看你们有什么样的图书馆了。通过这种方式,您在客户的环境中不会遇到legacy.jar版本冲突的问题。

还有第二种选择。将jar放入存储库,如下所述:

和您的在线存储库

允许客户端访问存储库,并将legacy.jar作为正常依赖项使用


这要看你们有什么样的图书馆了。通过这种方式,您的legacy.jar在客户的环境中不会出现版本冲突问题。

您能告诉我如何使用汇编插件将jar的类重新打包到我的工件中吗,因此,当我的客户将我的jar包含在他们的项目中时,他们将拥有他们所需要的一切?然而,我已经使用Shade插件更新了我的答案。这会创建一个包含所有内容的单独的jar吗,就像我在那边看到的那样,还是只创建一个包含所有内容的单独的myproject.jar?默认情况下是单个myproject.jar。但是,可以进行不同的配置。您能告诉我如何使用汇编插件将jar类重新打包到我的工件中,这样当我的客户将我的jar包含在他们的项目中时,他们将拥有他们所需要的一切吗?我已经使用Shade插件更新了我的答案。还有一件事,Kan。这会创建一个包含所有内容的单独的jar吗,就像我在那边看到的那样,还是只创建一个包含所有内容的单独的myproject.jar?默认情况下是单个myproject.jar。但是,可以进行不同的配置。我不想设置任何类型的存储库。我希望我的客户机有一个jar,这个jar拥有运行所需的一切。你所说的没有意义,因为遗留jar将始终与库jar耦合,换句话说,至少对于客户来说,没有另一个jar就不存在。没有你自己的存储库,shade/assembly解决方案是可行的。。。我的意思是你的罐子和其他罐子一起使用。例如,如果您的组件在web应用程序中使用,就会发生这种情况。我不想设置任何类型的存储库。我希望我的客户机有一个jar,这个jar拥有运行所需的一切。你所说的没有意义,因为遗留jar将始终与库jar耦合,换句话说,至少对于客户来说,没有另一个jar就不存在。没有你自己的存储库,shade/assembly解决方案是可行的。。。我的意思是你的罐子和其他罐子一起使用。例如,如果您的组件在web应用程序中使用,就会发生这种情况。