Maven:如何查询可执行类路径?

时间:2015-12-07 22:05:19

标签: java maven maven-3 pom.xml

我有一个带有一些指定依赖项的maven项目。

<dependency>
  <groupId>commons-io</groupId>
  <artifactId>commons-io</artifactId>
  <version>2.4</version>
</dependency>

如何查询maven以找出它用于这些依赖项的路径,或者我应该用于独立执行的类路径?

我的目标是构建一个使用适当的类路径运行程序的包装器。

1 个答案:

答案 0 :(得分:1)

Maven提供了几种替代方案:

Maven Dependency Plugin(build-classpath goal)

查看Maven Dependency Plugin,尤其是build-classpath目标提供外部执行使用的完整类路径。在众多选项中,outputFile参数可能会有所帮助 您不需要将其配置为使用,只需运行

即可
mvn dependency:build-classpath

在您的项目中,您将看到类路径作为构建输出的一部分。或

mvn dependency:build-classpath -Dmdep.outputFile=classpath.txt

将类路径重定向到文件。

Maven Dependency Plugin(copy-dependencies goal)

要构建一个包装器,您还可以查看copy-dependencies目标,该目标会将所需的依赖项(jars)(包括传递依赖项)复制到已配置的文件夹(因此您不需要硬编码路径到你当地的机器) 有关插件配置的示例,请访问官方网站here。 例如,以下配置:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>2.10</version>
            <executions>
                <execution>
                    <id>copy-dependencies</id>
                    <phase>package</phase>
                    <goals>
                        <goal>copy-dependencies</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>${project.build.directory}/dependencies</outputDirectory>
                        <overWriteReleases>false</overWriteReleases>
                        <overWriteSnapshots>false</overWriteSnapshots>
                        <overWriteIfNewer>true</overWriteIfNewer>
                        <includeScope>runtime</includeScope>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

将向文件夹target/dependencies添加在范围compile中声明的所有依赖项。注意:关于链接的官方示例,我添加了<includeScope>runtime</includeScope>配置条目(根据documentation和我的测试,将包括编译和运行时范围的依赖项),否则它还将包括{{ 1}}默认情况下的范围(我相信你在运行时不需要它)。

Exec Maven插件(java或exec目标)

或者,您可以使用Exec Maven Plugin使用所需的类路径从Maven执行test
有关插件配置的示例,请访问官方网站here 例如,以下配置:

main

将Exec插件配置为按照配置运行<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>1.1</version> <executions> <execution> <id>my-execution</id> <phase>package</phase> <goals> <goal>java</goal> </goals> </execution> </executions> <configuration> <mainClass>com.sample.MainApp</mainClass> </configuration> </plugin> 主类mvn exec:java,显然需要使用所需的类路径。

Maven Assembly Plugin

最后,Maven Assembly Plugin还提供了构建带有依赖关系的可执行jar的工具,正如here所述,在stackoverflow的另一个问题中。