是否将所有Maven依赖项下载到不在存储库中的目录中?


127

我开始将项目转换为Maven,因为我只需要使用以二进制形式分布在Maven上的库,但是在将头撞在墙上的时间过长之后,我决定不再伤害自己,而只是使用蚂蚁。我只想让Maven将jar及其所有传递依赖项下载到我选择的目录中,这样我就可以像往常一样将它们检入SCM,并再次成为一名幸福的开发人员。
任何想法如何轻松做到这一点?


2
考虑使用Ivy,并通过信任的Ant获得所需的传递依赖项管理。或硬着头皮使用Maven目录结构。
戴夫·牛顿


5
不,但是我已经花了所有的耐心在这一点上切换。下次吧。我想回到编码。可以用Maven完成吗?
chubbsondubs 2011年

Answers:


260

Maven的依赖插件有可能解决您的问题。

如果您有一个已pom指定所有项目依赖项的,则只需运行

mvn dependency:copy-dependencies

然后您将找到target/dependencies包含所有依赖项(包括传递性)的文件夹。

从下面添加Gustavo的答案:要下载依赖项,可以使用

mvn dependency:copy-dependencies -Dclassifier=sources

(通过Apache Maven Dependency Plugin doc)。


1
Thx @Raghuram,我很久以来一直在寻找这个。
eskalera

但是,如果我想将所有依赖项都复制到本地仓库中怎么办?这应该用于吗?如果可能已经在本地仓库中,为什么还要复制。无论如何是本地的。
2013年

1
@ses默认情况下,标准的Maven构建(例如,编译,测试,打包,安装等;不确定验证)已将所有依赖项复制到本地存储库中。不是为了这个。相反,它适用于出于任何原因需要应用程序依赖项的情况。我现在正在使用它来检查依赖库中是否有多余的API定义(例如,某些库将包含Javax API,这可能会与同一API的其他版本发生冲突),但是如果您的应用程序需要将其依赖项打包在一起,那也很好进行分发,或任何其他形式。
Spanky Quigman 2013年

1
+1可获得清晰,简洁且有用的答案。我刚刚经历了与OP相同的Maven跳舞,并且只想检索JAR文件依赖项。谢谢!我希望我能+10
Brandon

@Raghuram从技术上讲,您最终会在“目标/依赖项”中得到所有(已解决的)工件。此外,由于依赖项的“ groupId”坐标被忽略,因此存在名称冲突的潜在问题。换句话说,“ dependency:copy-dependencies”不保留布局结构。
whaefelinger 2014年

8

基于@Raghuram的答案,我找到了有关复制项目依赖项的教程,仅:

  1. 打开您的项目pom.xml文件,找到以下内容:

    <project>
      [...]
      <build>
        <plugins>
          ...
        </plugins>
      </build>
      [...]
    </project>
    
  2. 比用替换<plugins> ... </plugins>

    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <version>3.0.0</version>
        <executions>
          <execution>
            <id>copy-dependencies</id>
            <phase>package</phase>
            <goals>
              <goal>copy-dependencies</goal>
            </goals>
            <configuration>
              <outputDirectory>${project.build.directory}/alternateLocation</outputDirectory>
              <overWriteReleases>false</overWriteReleases>
              <overWriteSnapshots>false</overWriteSnapshots>
              <overWriteIfNewer>true</overWriteIfNewer>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
    
  3. 并在命令行中调用Maven mvn dependency:copy-dependencies

完成后,它将在存在的当前目录的target/dependency所有jar依赖项中创建文件夹pom.xml


在哪里键入“ mvn”命令?右键单击maven-project-> Maven-> .. ??
烤入半

在终端命令行中文件所在的pom.xml文件夹中。
用户

1
没用 我认为Maven仅作为插件安装。我还必须手动下载Maven。然后mvn dependency:copy-dependencies工作了!
烤入半

8

我终于弄清楚了如何使用Maven。在Eclipse中,创建一个新的Maven项目。

下载Maven,解压缩存档,将/bin文件夹添加到路径。

通过运行从命令行验证安装mvn -v(将打印版本和Java安装路径)

转到项目根文件夹(pom.xml位于此文件夹)并运行:

mvn dependency:copy-dependencies

所有jar文件都下载到/target/dependency

要设置另一个输出目录:

mvn dependency:copy-dependencies -DoutputDirectory="c:\temp"

现在,可以通过更改pom.xml将此Maven项目重新用于所有依赖项下载

通过构建路径->配置构建路径->库->添加JAR将jar添加到Java项目。


1
不一定必须是一个蚀项目。我在Java Decompiler中打开了一个jar文件,并将pom.xml复制到一个空文件夹中。我mvn dependency:copy-dependencies按照您在该文件夹中的描述进行了调用,并将所有相关的jar文件很好地复制到了一个文件夹中。
BernhardDöbler18年


2

请检查${MAVEN_HOME}/conf目录中是否有一些配置文件settings.xml。这些文件将覆盖.m2文件夹中的设置,因此,from的存储库文件夹.m2可能不可见或被丢弃。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.