我正在尝试在自定义容器的顶部执行应用程序部署的集成品尝。由于我的容器是自定义的,我不能使用Maven Cargo插件来设置容器。
我的容器:
我的问题是我必须在不同的进程中运行我的容器,因为它需要在我的测试执行时继续运行。此外,我在测试中有一个API,让我等待容器准备就绪(一种带超时的查找)。
我已将以下行添加到我的pom.xml
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<phase>pre-integration-test</phase>
<goals>
<goal>exec</goal>
</goals>
</execution>
</executions>
<configuration>
<executable>scripts/start-agent.bat</executable>
</configuration>
</plugin>
这将调用一个仅包含
的脚本开始调用gs-agent.bat
然而,mvn exec插件被卡住了,我的测试没有运行。根据{{3}}中的建议,我修改了我的pom.xml,如下所示:
<configuration>
<executable>cmd</executable>
<arguments>
<argument>/C</argument>
<argument>start</argument>
<argument>gs-agent.bat</argument>
</arguments>
</configuration>
但这似乎没有解决问题:
答案 0 :(得分:18)
exec插件无法执行此操作,我也发现了它的问题:http://jira.codehaus.org/browse/MEXEC-87
在上面链接的jira问题中,提到了一个具有该功能的exec插件的fork和一个链接。
除此之外,我认为你暂时需要使用antrun-plugin。
以下是从工作配置中获取并使用mvn verify
运行的示例。这需要在<plugins>
,而不是<pluginManagement>
(exec可以驻留在插件管理中就好了。)
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.6</version>
<executions>
<execution>
<phase>pre-integration-test</phase>
<configuration>
<target>
<exec executable="cmd.exe"
spawn="true">
<arg value="/c"/>
<arg value="D:\myfolder\test.bat"/>
</exec>
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
请注意,spawn="true"
是关键,如果您不希望执行阻止,如问题中指定的那样。如果您希望它立即阻止并查看输出,请将其设置为false。
答案 1 :(得分:6)
请参阅此问题:How do I run a batch file from my Java Application?
Windows批处理文件不可执行。它们是由cmd
可执行文件运行的脚本。
更多信息
Exec plugin source code显示Apache Commons Executor用于实际执行命令行。
你可以在这里做很多阅读,例如在Apache Commons Executor文档和他们的JIRA issues中,但是短版本是:这不是“Maven”的问题,这是一个问题执行exec()
命令的平台相关性质。
我之前已经解决了这类问题,我总是设计的解决方案是将.bat
脚本解构为实际命令并直接从exec
插件启动,而不是调用脚本。
答案 2 :(得分:1)
在我的情况下,我遇到了npm和ng的问题..潜在的问题是exec-maven-plugin
试图执行sh脚本(没有扩展名)。
重命名
C:\Users\User\AppData\Roaming\npm\ng
至C:\Users\User\AppData\Roaming\npm\ng.sh
和
C:\apps\nodejs\npm
至C:\apps\nodejs\npm.sh
解决了这个问题。
答案 3 :(得分:0)
The Fallowing Code适合我
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.3</version>
<executions>
<execution>
<phase>generate-sources</phase>
<configuration>
<tasks>
<exec dir="${project.basedir}" executable="Script.bat" failonerror="true">
</exec>
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
答案 4 :(得分:0)
如果要使用 exec-maven-plugin ,请参见下面的示例,以运行带有参数的批处理脚本。例如。运行类似的内容:
.\test.bat arg1 arg2 arg3
将以下内容添加到pom.xml:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.6.0</version>
<executions>
<execution>
<id>exec-test</id>
<phase>prepare-package</phase>
<goals>
<goal>exec</goal>
</goals>
</execution>
</executions>
<configuration>
<executable>cmd</executable>
<workingDirectory>./</workingDirectory>
<arguments>
<argument>/c</argument>
<argument>start</argument>
<argument>""</argument>
<argument>exec.bat</argument>
<argument>arg1</argument>
<argument>arg2</argument>
<argument>arg3</argument>
</arguments>
</configuration>
</plugin>