Maven Exec Plugin:如何配置工作目录
Posted
技术标签:
【中文标题】Maven Exec Plugin:如何配置工作目录【英文标题】:Maven Exec Plugin : How configure the working directory 【发布时间】:2014-10-15 09:49:17 【问题描述】:我正在使用带有以下命令的 Exec Maven 插件:
mvn exec:java
我没有设法用这种执行模式设置工作目录。 我想使用 mainClass(在特定包中) 我希望执行的根文件夹位于 $basedir 之外的另一个目录中。
感谢您的帮助。
我的 pom.xml 中的目标
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.3.2</version>
<configuration>
<workingDirectory>$project.build.directory\classes</workingDirectory>
<mainClass>com.package.MyMainClass</mainClass>
<includeProjectDependencies>true</includeProjectDependencies>
</configuration>
</plugin>
使用 -X 选项的结果
[DEBUG] Configuring mojo org.codehaus.mojo:exec-maven-plugin:1.3.2:java from plugin realm ClassRealm[plugin>org.codehaus.mojo:exec-maven-plugin:1.3.2,parent: sun.misc.Launcher$AppClassLoader@11b86e7]
[DEBUG] Configuring mojo 'org.codehaus.mojo:exec-maven-plugin:1.3.2:java' with basic configurator -->
[DEBUG] (f) arguments = []
[DEBUG] (f) classpathScope = runtime
[DEBUG] (f) cleanupDaemonThreads = true
[DEBUG] (f) daemonThreadJoinTimeout = 15000
[DEBUG] (f) includePluginDependencies = false
[DEBUG] (f) includeProjectDependencies = true
[DEBUG] (f) keepAlive = false
[DEBUG] (f) killAfter = 1
[DEBUG] (f) localRepository = id: local url: file:///C:/Users/100728452/.m2/repository/ layout: none
[DEBUG] (f) mainClass = com.package.MyMainClass
[DEBUG] (f) pluginDependencies = [org.codehaus.mojo:exec-maven-plugin:maven-plugin:1.3.2:, org.codehaus.plexus:plexus...
[DEBUG] (f) skip = false
[DEBUG] (f) stopUnresponsiveDaemonThreads = false
[DEBUG] (s) key = sun.java2d.ddoffscreen
[DEBUG] (s) value = false
[DEBUG] (s) key = com.odi.OStoreLicenseFile
[DEBUG] (s) value = .\library\odi\etc\license.txt
[DEBUG] (f) systemProperties = [org.codehaus.mojo.exec.Property@194e776, org.codehaus.mojo.exec.Property@e80740]
[DEBUG] -- end configuration --
[WARNING] Warning: killAfter is now deprecated. Do you need it ? Please comment on MEXEC-6.
[DEBUG] Invoking : com.mypackage.MyMainClass.main()
[DEBUG] Plugin Dependencies will be excluded.
[DEBUG] Project Dependencies will be included.
[DEBUG] Collected project artifacts [javax.help:javahelp:jar:2.0.02:compile,
【问题讨论】:
也有***.com/a/9529800/2746335,不过会干扰其他插件 【参考方案1】:我没有找到 exec:java 的解决方案。
所以,现在我使用 exec:exec 代替,因为我们可以设置 workingDirectory 并且可以。
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.3.2</version>
<executions>
<execution>
<goals>
<goal>exec</goal>
</goals>
</execution>
</executions>
<configuration>
<executable>java</executable>
<arguments>
<argument>-classpath</argument>
<classpath />
<argument>com.package.MyMainClass</argument>
</arguments>
<workingDirectory>$project.build.outputDirectory</workingDirectory>
</configuration>
【讨论】:
陷阱:如果目录不存在,它会回退到基本目录而不提供任何信息!所以用mvn -X verify | grep working
或类似的方法检查一下【参考方案2】:
我也找不到有效的修复程序,但是适用于我的情况的丑陋解决方法是简单地将 $project.build.directory
(或任何 maven 属性)作为参数传递给主类并从在那里。
<configuration>
[...]
<arguments>
<argument>$project.build.directory</argument>
</arguments>
[...]
</configuration>
在代码中设置当前工作目录以正确模拟不工作的workingDirectory
配置有点棘手,如果您坚持这样做,请查看this 链接答案以获取更多信息。
【讨论】:
【参考方案3】:如果你想通过调用mvn exec:java ...
来设置它,你需要像这样通过属性:
mvn exec:java -Dexec.workingdir=Folder ...
这与您在 pom 中定义的内容无关,因为调用目标 exec:java
不是生命周期的一部分。
【讨论】:
谢谢,但即使我添加了这个 -Dexec 选项,它对我也不起作用,我的 Main 类在我的工作目录中找不到文件。我已经粘贴了 mvn exec:java -X 命令的结果 你的主类搜索什么样的文件?属性文件? 我的 Java 程序在运行文件夹中需要一个 dll。该文件位于正确的位置,但我仍然收到相同的错误:缺少 dll。否则我在我的 Junit 测试中使用了 surefire 插件,它对我来说很好,workingDirectory 目标工作 属性 exec.workingdir 只能在通过 exec:exec 执行时使用。以上是关于Maven Exec Plugin:如何配置工作目录的主要内容,如果未能解决你的问题,请参考以下文章
用 exec.mainClass 覆盖 exec-maven-plugin
如何使用 maven-exec-plugin 进行 npm clean?
exec-maven-plugin 使用 DynamoDBLocal 时如何在 pom.xml 中设置 mainClass [重复]