【问题标题】:Maven: how to query the executable classpath?Maven:如何查询可执行的类路径?
【发布时间】:2016-03-12 16:21:56
【问题描述】:

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

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

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

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

【问题讨论】:

  • 我用更多细节更新了我的答案,希望对您有所帮助
  • @A.DiMatteo,它确实有帮助,谢谢。有没有地方告诉如何安装这些插件?
  • 当然,来自Maven官方文档,这里maven.apache.org/guides/getting-started/…简要介绍了如何使用插件,然后在每个插件站点上都有几个示例,我会进一步更新我的答案。

标签: java maven maven-3 pom.xml


【解决方案1】:

Maven 中提供了几种替代方案:

Maven 依赖插件(构建类路径目标)

查看 Maven 依赖插件,尤其是 build-classpath 目标为外部执行使用提供了完整的类路径。在众多选项中,outputFile 参数可能会有所帮助。
使用不需要配置,直接运行即可

mvn dependency:build-classpath

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

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

仅将类路径重定向到文件。

Maven 依赖插件(复制依赖目标)

要构建包装器,您还可以查看copy-dependencies 目标,它将所需的依赖项(jar)(包括传递依赖项)复制到配置的文件夹中(因此您不需要硬编码到本地计算机的路径)。
官方网站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>

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

Exec Maven 插件(java 或 exec 目标)

或者,您可以使用 Exec Maven Plugin 使用所需的类路径从 Maven 执行 main
官方网站here提供了插件配置示例。
比如下面的配置:

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

将配置 Exec 插件以通过 mvn exec:java 运行主类 MainApp 配置,显然具有所需的类路径。

Maven 组装插件

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-10
    • 1970-01-01
    • 2015-10-04
    • 1970-01-01
    • 1970-01-01
    • 2015-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多