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

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


当前回答

简单地把刚才说过的内容讲一遍。我想创建一个可执行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

其他回答

试试这样做:

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
    <archive>
        <manifest>  
            <addClasspath>true</addClasspath>
            <classpathPrefix>lib/</classpathPrefix>
            <mainClass>MainClass</mainClass>
        </manifest>
    </archive>
    </configuration>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>2.4</version>
    <executions>
        <execution>
            <id>copy</id>
            <phase>install</phase>
            <goals>
                <goal>copy-dependencies</goal>
            </goals>
            <configuration>
                <outputDirectory>
                    ${project.build.directory}/lib
                </outputDirectory>
            </configuration>
        </execution>
    </executions>
</plugin>

最好的方法取决于你想做什么:

If you want to bundle your dependencies into a WAR or EAR file, then simply set the packaging type of your project to EAR or WAR. Maven will bundle the dependencies into the right location. If you want to create a JAR file that includes your code along with all your dependencies, then use the assembly plugin with the jar-with-dependencies descriptor. Maven will generate a complete JAR file with all your classes plus the classes from any dependencies. If you want to simply pull your dependencies into the target directory interactively, then use the dependency plugin to copy your files in. If you want to pull in the dependencies for some other type of processing, then you will probably need to generate your own plugin. There are APIs to get the list of dependencies, and their location on disk. You will have to take it from there...

你所需要的只是在pom.xml的build/plugins里面的以下代码片段:

<plugin>
    <artifactId>maven-dependency-plugin</artifactId>
    <executions>
        <execution>
            <phase>prepare-package</phase>
            <goals>
                <goal>copy-dependencies</goal>
            </goals>
            <configuration>
                <outputDirectory>${project.build.directory}/lib</outputDirectory>
            </configuration>
        </execution>
    </executions>
</plugin>

当您运行时,上面的代码将在包阶段运行

mvn clean package

依赖项将被复制到代码片段中指定的outputDirectory,在本例中为lib。

如果只是偶尔这样做,则不需要更改pom.xml。简单地运行以下命令:

mvn clean package dependency:copy-dependencies

重写默认位置${project.build。目录}/依赖,添加一个名为outputDirectory的系统属性,即

    -DoutputDirectory=${project.build.directory}/lib

假设

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

以下是对我有效的方法:

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

这对我来说很管用:

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