我如何让我的项目的运行时依赖复制到目标/lib文件夹?

就像现在一样,在mvn清洁安装后,目标文件夹只包含我的项目的jar,但没有运行时依赖项。


当前回答

看一看Maven依赖项插件,特别是依赖项:复制依赖项目标。查看标题为“依赖:复制依赖的魔咒”下的示例。将outputDirectory配置属性设置为${basedir}/target/lib(我相信,您必须进行测试)。

希望这能有所帮助。

其他回答

简单地把刚才说过的内容讲一遍。我想创建一个可执行JAR文件,其中包括我的依赖关系和我的代码。这招对我很管用:

(1)在pom中,在<build><plugins>下,我包括:

<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>2.2-beta-5</version>
    <configuration>
        <archive>
            <manifest>
                <mainClass>dk.certifikat.oces2.some.package.MyMainClass</mainClass>
            </manifest>
        </archive>
        <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
    </configuration>
</plugin>

(2)运行mvn compile assembly:assembly在项目的目标目录下生成所需的my-project-0.1-SNAPSHOT-jar-with-dependencies.jar。

(3)我用java -jar my-project-0.1-SNAPSHOT-jar-with-dependencies.jar运行JAR

这对我来说很管用:

<project>
  ...
  <profiles>
    <profile>
      <id>qa</id>
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
              <execution>
                <phase>install</phase>
                <goals>
                  <goal>copy-dependencies</goal>
                </goals>
                <configuration>
                  <outputDirectory>${project.build.directory}/lib</outputDirectory>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>
</project>

假设

您不希望更改pom.xml 你不想要测试范围(例如junit.jar)或提供的依赖关系(例如wlfullclient.jar)

以下是对我有效的方法:

mvn install dependency:copy-dependencies -DincludeScope=runtime -DoutputDirectory=target/lib

如果你想偶尔这样做(因此不想改变你的POM),试试这个命令行:

mvn dependency:copy-dependencies -DoutputDirectory=${project.build.directory}/lib

如果省略最后一个参数,依赖项将放在target/dependencies中。

mvn install dependency:copy-dependencies 

工作为我在目标文件夹中创建的依赖目录。喜欢它!