我有一个带有一些指定依赖项的maven项目。
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
如何查询maven以找出它用于这些依赖项的路径,或者我应该用于独立执行的类路径?
我的目标是构建一个使用适当的类路径运行程序的包装器。
答案 0 :(得分:1)
Maven提供了几种替代方案:
查看Maven Dependency Plugin,尤其是build-classpath目标提供外部执行使用的完整类路径。在众多选项中,outputFile
参数可能会有所帮助
您不需要将其配置为使用,只需运行
mvn dependency:build-classpath
在您的项目中,您将看到类路径作为构建输出的一部分。或
mvn dependency:build-classpath -Dmdep.outputFile=classpath.txt
将类路径重定向到文件。
要构建一个包装器,您还可以查看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 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还提供了构建带有依赖关系的可执行jar的工具,正如here所述,在stackoverflow的另一个问题中。