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

时间:2011-10-05 15:00:58

标签: java maven-2 maven dependencies

所以我的maven项目依赖于一个不在任何maven存储库中的jar。因此,我需要使用系统范围将此本地文件包含在我的maven类路径中。问题是:当我构建我的最终jar来分发我的库时,我确实需要以某种方式包含它的依赖。可以提取类,然后将其与我的库类捆绑在一起,或者jar可以以某种方式包含在我的库jar中。我甚至不确定后者(罐子里面的jar)是否可以用Java。

那我该如何处理这个问题呢? Maven是否会依赖我的系统范围并为我处理这个问题?我该怎么办?

谢谢!

3 个答案:

答案 0 :(得分:5)

不,它不会。这些依赖项仅用于编译和传递依赖项解析。你的图书馆消费者也应该有jar。 但是,您可以使用Assembly Plugin将jar的类重新打包到工件中。

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

UDPATE:为树荫插件添加示例(而不是程序集)

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

答案 1 :(得分:0)

答案 2 :(得分:0)

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

http://maven.apache.org/guides/mini/guide-3rd-party-jars-local.html

和您的在线存储库

http://maven.apache.org/guides/mini/guide-3rd-party-jars-remote.html

让您的客户端访问您的存储库,并将您的legacy.jar用作正常依赖项。

这取决于你有什么样的图书馆。通过这种方式,您可以在客户的环境中遇到legacy.jar版本冲突的问题。