Maven Exec 插件:如何配置工作目录

问题描述 投票:0回答:4

我正在通过以下命令使用 Exec Maven 插件:

mvn 执行:java

并且我没有设法用这种执行模式设置工作目录。 我想使用 mainClass (在特定包中) 我希望执行的根文件夹位于 ${basedir} 之外的另一个目录中。

谢谢您的帮助。

我的 pom.xml 中的目标 < workingDirectory > 对我不起作用:

<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,
java maven exec
4个回答
30
投票

我没有找到 exec:java 的解决方案。

所以,现在我使用 exec:exec 来代替,因为我们可以设置工作目录,就可以了。

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

3
投票

我也找不到有效的修复方法,但是适用于我的情况的一个丑陋的解决方法是简单地将

${project.build.directory}
(或任何与此相关的 Maven 属性)作为参数传递给主类并从那里处理它。

<configuration>
    [...]
    <arguments>
        <argument>${project.build.directory}</argument>
    </arguments>
    [...]
</configuration>

在代码中设置当前工作目录以正确模拟非工作

workingDirectory
配置有点棘手,如果您坚持这样做,请检查 this 链接答案以获取更多信息。


1
投票

如果您想通过调用

mvn exec:java ...
来设置它,您需要像这样通过属性:

mvn exec:java -Dexec.workingdir=Folder ...

这与您在 pom 中定义的内容无关,因为调用目标

exec:java
不是生命周期的一部分。


0
投票

一种解决方法可能是将目录更改为您想要工作目录的位置,并使用

--file
参数指示 Maven 使用另一个目录中的 pom 文件。

示例:

cd /some/working/directory
mvn exec:java --file /path-to-maven-project/pom.xml -Dexec.mainClass="com.mypackage.MainClass"

如果您使用的是 Bash,那么这两个命令都可以包含在子 shell 中,以便在完成后自动切换回原始工作目录:

(cd /some/working/directory && mvn exec:java --file /path-to-maven-project/pom.xml -Dexec.mainClass="com.mypackage.MainClass")
© www.soinside.com 2019 - 2024. All rights reserved.