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

a11xaf1n  于 2023-01-25  发布在  Maven
关注(0)|答案(7)|浏览(163)

我开始将我的项目转换为Maven,因为我需要使用一个仅在Maven上以二进制形式分发的库,但是在我的头撞在墙上太久之后,我决定停止伤害自己,只用Ant。我想让maven把jar和它的所有可传递依赖项下载到我选择的目录中,这样我就可以像往常一样把它们签入SCM再次享受并成为一名幸福的开发人员。
有什么办法能轻松做到吗?

cnwbcb6i

cnwbcb6i1#

maven dependency plugin有可能解决您的问题。
如果您有一个pom,并且指定了所有的项目依赖项,那么您所需要做的就是运行

mvn dependency:copy-dependencies

您将发现target/dependencies文件夹中充满了所有依赖项,包括可传递的。
从下面添加Gustavo的回答:要下载依赖项 * 源 *,可以使用

mvn dependency:copy-dependencies -Dclassifier=sources

(via Apache Maven依赖项插件文档)。

sqserrrh

sqserrrh2#

我终于想出了如何使用Maven。从Eclipse中创建一个新的Maven项目。
下载Maven,解压缩归档文件,将/bin文件夹添加到path。
通过运行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项目。

pkbketx9

pkbketx93#

根据@Raghuram的回答,我找到了一个关于Copying project dependencies的教程,只是:
1.打开您的项目pom.xml文件,并找到以下内容:

<project>
  [...]
  <build>
    <plugins>
      ...
    </plugins>
  </build>
  [...]
</project>

1.将<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>

1.并在命令行mvn dependency:copy-dependencies中调用maven
完成后,它将在pom.xml所在的当前目录上的所有jar依赖项中创建文件夹target/dependency

ssgvzors

ssgvzors4#

我找到了下一条命令
mvn dependency:copy-dependencies -Dclassifier=sources
此处为maven.apache.org

1yjd4xko

1yjd4xko5#

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

ltqd579y

ltqd579y6#

我的简单脚本基于user基于Raghuram

getmvndep.sh

#!/bin/bash
groupId=$1
artifactId=$2
version=$3
echo "<project>"                                                      > pom.xml
echo "  <modelVersion>4.0.0</modelVersion>"                          >> pom.xml
echo "  <groupId>com.temp.temp</groupId>"                            >> pom.xml
echo "  <artifactId>temp</artifactId>"                               >> pom.xml
echo "  <packaging>jar</packaging>"                                  >> pom.xml
echo "  <version>0.0.0</version>"                                    >> pom.xml
echo "  <dependencies>"                                              >> pom.xml
echo "    <dependency>"                                              >> pom.xml
echo  "     <groupId>${groupId}</groupId>"                           >> pom.xml
echo  "     <artifactId>${artifactId}</artifactId>"                  >> pom.xml
echo  "     <version>${version}</version>"                           >> pom.xml
echo "    </dependency>"                                             >> pom.xml
echo "  </dependencies>"                                             >> pom.xml
echo "  <build>"                                                     >> pom.xml
echo "    <plugins>"                                                 >> pom.xml
echo "    </plugins>"                                                >> pom.xml
echo "  </build>"                                                    >> pom.xml
echo "</project>"                                                    >> pom.xml
mvn dependency:copy-dependencies -DoutputDirectory="./libs/${version}"
rm pom.xml
avwztpqn

avwztpqn7#

基于Patrik Polak的答案,基于user,基于Raghuram,这里是针对windows用户的相同脚本。

CD /D %~dp0

IF "%1" EQU "" goto:EOF
IF "%2" EQU "" goto:EOF
IF "%3" EQU "" goto:EOF

SET groupId=%1
SET artifactId=%2
SET version=%3

echo ^<project^>                                      > pom.xml
echo   ^<modelVersion^>4.0.0^</modelVersion^>         >> pom.xml
echo   ^<groupId^>com.temp.temp^</groupId^>           >> pom.xml
echo   ^<artifactId^>temp^</artifactId^>              >> pom.xml
echo   ^<packaging^>jar^</packaging^>                 >> pom.xml
echo   ^<version^>0.0.0^</version^>                   >> pom.xml
echo   ^<dependencies^>                               >> pom.xml
echo     ^<dependency^>                               >> pom.xml
echo       ^<groupId^>%groupId%^</groupId^>           >> pom.xml
echo       ^<artifactId^>%artifactId%^</artifactId^>  >> pom.xml
echo       ^<version^>%version%^</version^>           >> pom.xml
echo     ^</dependency^>                              >> pom.xml
echo   ^</dependencies^>                              >> pom.xml
echo   ^<build^>                                      >> pom.xml
echo     ^<plugins^>                                  >> pom.xml
echo     ^</plugins^>                                 >> pom.xml
echo   ^</build^>                                     >> pom.xml
echo ^</project^>                                     >> pom.xml

mkdir .\%groupId%-%artifactId%-%version%-jars

call  mvn dependency:copy-dependencies -DoutputDirectory=.\%groupId%-%artifactId%-%version%-jars

del pom.xml

pause

相关问题