在我的项目中,我们创建了一个Maven模块来获取特定的JBoss AS并解压缩.
然后,所有测试用例都可以作为嵌入式容器在此Jboss AS下运行.
我们使用jboss-ejb3-embedded-standalone来调用嵌入式容器,但是,它只是从环境变量中找到JBOSS_HOME并使用它来运行.因此,我们必须每mvn安装更新JBOSS_HOME.
我试着在maven中通过引入exec-maven-plugin来做到这一点,如下所示:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<configuration>
<executable>env</executable>
<environmentVariables>
<JBOSS_HOME>
C:/Sample/embedded-container/jboss-${version.org.jboss.jbossas}
</JBOSS_HOME>
</environmentVariables>
</configuration>
<executions>
<execution>
<id>resetJbossHome</id>
<phase>integration-test</phase>
<goals>
<goal>exec</goal>
</goals>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
在控制台的输出中,我可以看到
[INFO] --- exec-maven-plugin:1.2.1:exec (resetJbossHome) @ test-embedded ---
....
JBOSS_HOME=C:/Sample/embedded-container/jboss-6.1.0.Final
Run Code Online (Sandbox Code Playgroud)
....
但是在启动JBOSS时,它仍在运行JBOSS_HOME设置源的JBOSS.
此外,我也试过使用maven-antrun-plugin.
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>copyRelease</id>
<phase>pre-integration-test</phase>
<configuration>
<tasks>
<exec executable="env">
<env key="JBOSS_HOME" value="C:/Sample/embedded-container/jboss-${version.org.jboss.jbossas}"/>
</exec>
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
事实证明是一样的.
我配置错了还是有更好的方法?
我正在尝试使用exec-maven-plugin
集成第三者Java API的方法。我正在使用exec:java
目标来调用我的Java主类。我需要解析API的输出,但是在允许此操作的插件中看不到任何特定的东西。
Maven和/或exec-maven-plugin中有没有一种方法可以捕获/保存执行的输出?
我正在使用 exec-maven-plugin 来运行 java 应用程序。我需要传递 JVM 参数和程序参数。我正在像这样设置 JVM 参数:
<artifactId>exec-maven-plugin</artifactId>
<version>1.6.0</version>
<executions>
<execution>
<id>MyId</id>
<goals>
<goal>java</goal>
</goals>
<configuration>
<mainClass>MyClass</mainClass>
<arguments>
<argument>-XX:+UseG1GC</argument>
<argument>-Xms2G</argument>
<argument>-Xmx2G</argument>
</arguments>
</configuration>
</execution>
Run Code Online (Sandbox Code Playgroud)
...
并运行程序:
mvn exec:java@MyId -Dexec.args="my params"
Run Code Online (Sandbox Code Playgroud)
但是看起来 pom.xml 中设置的参数没有被 -Dexec.args 使用和覆盖,并且 section 仅用作程序参数。
试图添加到参数中(如本文所示),但遇到了
Unable to parse configuration of mojo org.codehaus.mojo:exec-maven-plugin:1.6.0:java for parameter arguments: Cannot store value into array:
ArrayStoreException -> [Help 1]
Run Code Online (Sandbox Code Playgroud)
在 jboss.org 上发现了类似的未解决问题。
有什么建议?
在我的pom中,我添加了exec-maven-plugin来调用一个生成文件的java类.此类需要将一些参数传递给main方法,其中一个是输入文件的位置(在项目外部).到目前为止,我一直在使用相对路径,这工作正常:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<executions>
<execution>
<phase>test</phase>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>com.laco.projectmaster.util.LanguageGenerator</mainClass>
<arguments>
<argument>../PM-Config/dev/PMLanguage.xls</argument>
<argument>PM4.0</argument>
<argument>${project.build.outputDirectory}/com/laco/projectmaster/props/resources</argument>
<argument>ProjectMaster</argument>
<argument>Created during maven build (POM Version: ${pom.version})</argument>
</arguments>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
现在我开始使用hudson来安装/打包和部署战争,我不能再使用这个相对路径了.简单我想,我只是在调用maven时传递输入文件的位置:
mvn clean package -Dlangdir = C:/ somedir
然后改变pom像:
<argument>${langdir}/PMLanguage.xls</argument>
Run Code Online (Sandbox Code Playgroud)
但是,此参数在此处仅被忽略.主类作为参数接收的路径变为null/PMLanguage.xls.参数本身在maven中可用,我使用antrun插件中的echo测试成功.正确的道路得到了回应.
你传递给maven的参数是否默认无论你在pom中引用它们在哪里都没有?
感谢任何帮助,
Stijn
我正在使用 Exec Maven 插件在我的 Maven 构建中运行 java 程序。我在使用 exec 插件执行此 java 程序时遇到问题,因为它使用包含项目依赖项的类路径执行,其中包括执行的 java 程序中不需要的 xml 解析器实现,并会导致错误。将属性“includeProjectDependency”设置为 false 不是一个选项,因为我需要项目中的其他依赖项(并且不想将它们显式设置为插件执行配置以避免重复)。通过 exec 插件运行程序时,有没有办法将其从类路径中排除?我只知道如何排除项目中的依赖项(这是错误的,因为我在生成的战争文件中需要它)或如何排除插件的依赖项,但找不到在执行时如何排除项目依赖项的方法插入...
我希望有一种方法可以实现我想要的目标,如果有人能给我一些建议,那将会非常有帮助。
谢谢,马可
我正在使用 Maven 3.1.1 和exec-maven-plugin
(1.3) 以便在构建作业期间执行 bash 脚本。
bash 脚本stdout
使用echo
和生成输出printf
。我注意到脚本的输出不会立即写入 Maven 控制台输出。相反,Maven 控制台输出“冻结”,直到它一次被 bash 脚本的多个输出行更新。我不知道更新 Maven 输出的触发器是什么(超时?完整的输出缓冲区?)但它非常慢。
让我们来看一个非常简单的 bash 脚本,例如counter.sh
:
#!/usr/bin/env bash
for i in `seq 1 1000`; do
echo $i
sleep 0.5
done
Run Code Online (Sandbox Code Playgroud)
这是我的插件配置pom.xml
:
<plugin>
<artifactId>exec-maven-plugin</artifactId>
<groupId>org.codehaus.mojo</groupId>
<version>1.3</version>
<executions>
<execution>
<id>execute-script</id>
<phase>package</phase>
<goals>
<goal>exec</goal>
</goals>
<configuration>
<executable>${project.build.directory}/executable/counter.sh</executable>
</configuration>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
当我使用 执行构建作业时mvn clean package
,maven 输出冻结在exec-maven-plugin
并且不显示任何进度/输出,直到脚本在大约 8 分钟后完成。
当我执行另一个运行时间更长的脚本时,我每约 15 分钟得到一个输出块。
我正在寻找的是一种在 Maven 控制台输出中即时查看 …
我正在尝试将 exec-maven-plugin 与java
目标一起使用。但是,我对这两个选项之间的区别感到困惑:
如果我尝试使用参数,对我的 java 类的调用将失败。
我的班级被调用的签名是:
public static void main(String[] args)
{
VeracodeParser parser = new VeracodeParser();
parser.parse(args);
}
Run Code Online (Sandbox Code Playgroud)
我的pom:
<plugin>
<artifactId>exec-maven-plugin</artifactId>
<groupId>org.codehaus.mojo</groupId>
<executions>
<execution>
<id>Zip packaging and deployment</id>
<phase>process-sources</phase>
<goals>
<goal>java</goal>
</goals>
<configuration>
<mainClass>com.veracode.apiwrapper.cli.VeracodeCommand</mainClass>
<arguments>
<argument>-action GetAppList</argument>
<argument>-vuser ${veracode.username}</argument>
<argument>-vpassword ${veracode.password}</argument>
</arguments>
</configuration>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
但是,我从 VeracodeCommand 类收到错误消息,表明我缺少-action
,-vuser
和-vpassword
参数。
但是,当我将其切换为使用单个字符串commandlineArgs
参数时,它按预期工作:
<plugin>
<artifactId>exec-maven-plugin</artifactId>
<groupId>org.codehaus.mojo</groupId>
<executions>
<execution>
<id>Zip packaging and deployment</id>
<phase>process-sources</phase>
<goals>
<goal>java</goal>
</goals>
<configuration>
<mainClass>com.veracode.apiwrapper.cli.VeracodeCommand</mainClass>
<commandlineArgs>-action …
Run Code Online (Sandbox Code Playgroud) 我希望通过 maven 执行 wsdl2java 并尝试了几种不同的方法但没有完全成功。我做的第一种方式:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>java</goal>
</goals>
<configuration>
<mainClass>org.apache.axis.wsdl.WSDL2Java</mainClass>
<arguments>
<argument>-client</argument>
<argument>-o</argument>
<argument>gensrc</argument>
<argument>wsdl/JobAPIWebWrapped.wsdl</argument>
</arguments>
</configuration>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
由于对 org.apache.axis.wsdl.WSDL2Java 的调用,此版本将创建我正在寻找的确切结构,但不会继续使用除此之外的任何其他 maven 插件。它以执行 main 或类似的东西来结束日志。
我尝试过的另一种方法:
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<version>3.1.2</version>
<executions>
<execution>
<id>generate-sources</id>
<phase>generate-sources</phase>
<configuration>
<sourceRoot>gensrc</sourceRoot>
<wsdlOptions>
<wsdlOption>
<wsdl>wsdl/JobAPIWebWrapped.wsdl</wsdl>
</wsdlOption>
</wsdlOptions>
</configuration>
<goals>
<goal>wsdl2java</goal>
</goals>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
此执行的问题在于它生成的 java 文件比之前执行的更高。我检查了这个更大的文件集的兼容性,发现它可以正常工作,但想找到一种方法来强制它使用与第一个示例相同的 java 类来执行。但是,此版本将完成并允许我继续使用 maven 调用的以下插件。
第三:
<plugin>
<groupId>org.apache.axis</groupId>
<artifactId>wsdl2java-maven-plugin</artifactId>
<version>1.4.1-SNAPSHOT</version>
<executions>
<execution>
<id>generate-sources</id>
<phase>generate-sources</phase>
<configuration>
<implementationClassName>org.apache.axis.wsdl.WSDL2Java</implementationClassName>
</configuration>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
这个版本甚至没有被识别......想知道我是否错误地调用了插件,因为它甚至没有出现在任何带有详细日志记录的地方。 …
我想使用 maven-exec-plugin 运行命令行(cmd),以便使用 Pandoc 将 Markdown 文件转换为 PDF 文件。
要手动执行此操作,我已执行以下命令:
pandoc ReadMe.md -o ReadMe.html
pandoc ReadMe.html --latex-engine=xelatex -o ReadMe.pdf
Run Code Online (Sandbox Code Playgroud)
我无法在一个命令中运行它,pandoc 给出了奇怪的错误!但这是另一个问题......
我已经使用在网上找到的其他示例将它添加到我的 pom 文件中,但没有成功。
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<executions>
<execution>
<id>pandoc</id>
<phase>generate-pdf</phase>
<configuration>
<executable>cmd</executable>
<workingDirectory></workingDirectory>
<arguments>
<argument>/C</argument>
<argument>pandoc</argument>
<argument>README.md</argument>
<argument>-o</argument>
<argument>README.html</argument>
</arguments>
</configuration>
<goals>
<goal>exec</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
Run Code Online (Sandbox Code Playgroud)
我不是 Maven 大师,感谢帮助!
我有一个关于 maven 如何在构建过程中计算类路径的问题。具体来说,什么控制何时使用“目标/类”以及何时使用存储库(本地/远程)中的“jar”。
我在版本 1.0.0-SNAPSHOT 上有一个项目,其中尚未安装/部署工件,因此某些存储库(远程或本地)中没有“jar”来解决它们。我想运行“generate-sources”而不在本地安装(没有' mvn install
'运行)。
结构如下所示:
parent-prj
parent-prj/sub-prj
parent-prj/gen-src-prj <--- This depends on 'sub-prj'
Run Code Online (Sandbox Code Playgroud)
当我运行“ mvn -am -pl parent-prj/gen-src-prj generate-sources
”以生成一些java文件时,它不起作用:
[ERROR] Failed to execute goal on project gen-src-prj: Could
not resolve dependencies for project
mygrp:gen-src-prj:jar:1.0.0-SNAPSHOT:
Could not find artifact
mygrp:sub-prj:jar:1.0.0-SNAPSHOT -> [Help 1]
Run Code Online (Sandbox Code Playgroud)
使用调试输出并添加“dependency:build-classpath”,我可以确认 maven 忽略了反应器中“sub-prj”的存在,并在它找不到的地方寻找“jar”。然而,该项目打印在反应堆摘要中:
[INFO] Reactor Summary:
[INFO]
[INFO] parent-prj ..................................... SUCCESS [ 0.625 s]
[INFO] sub-prj ........................................ SUCCESS [ 0.018 s]
[INFO] gen-src-prj .................................... FAILURE [ 0.040 s]
Run Code Online (Sandbox Code Playgroud)
我注意到的有趣的事情是运行 compile 目标工作正常!这使用sub-prj/target/classes …