标签: exec-maven-plugin

如何在每次运行的Maven中设置环境变量?

在我的项目中,我们创建了一个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)

事实证明是一样的.

我配置错了还是有更好的方法?

jboss maven exec-maven-plugin

7
推荐指数
1
解决办法
2万
查看次数

如何捕获exec-maven-plugin的输出?

我正在尝试使用exec-maven-plugin集成第三者Java API的方法。我正在使用exec:java目标来调用我的Java主类。我需要解析API的输出,但是在允许此操作的插件中看不到任何特定的东西。

Maven和/或exec-maven-plugin中有没有一种方法可以捕获/保存执行的输出?

java maven exec-maven-plugin

6
推荐指数
1
解决办法
2486
查看次数

如何使用 exec-maven-plugin 设置 VM 参数和程序参数?

我正在使用 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 上发现了类似的未解决问题。

有什么建议?

jvm-arguments maven-plugin maven-3 maven exec-maven-plugin

6
推荐指数
1
解决办法
4019
查看次数

Maven - 传递参数以在exec-maven-plugin中使用

在我的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

maven-2 exec-maven-plugin

5
推荐指数
1
解决办法
2万
查看次数

如何从 Maven 插件使用的类路径中排除项目依赖

我正在使用 Exec Maven 插件在我的 Maven 构建中运行 java 程序。我在使用 exec 插件执行此 java 程序时遇到问题,因为它使用包含项目依赖项的类路径执行,其中包括执行的 java 程序中不需要的 xml 解析器实现,并会导致错误。将属性“includeProjectDependency”设置为 false 不是一个选项,因为我需要项目中的其他依赖项(并且不想将它们显式设置为插件执行配置以避免重复)。通过 exec 插件运行程序时,有没有办法将其从类路径中排除?我只知道如何排除项目中的依赖项(这是错误的,因为我在生成的战争文件中需要它)或如何排除插件的依赖项,但找不到在执行时如何排除项目依赖项的方法插入...

我希望有一种方法可以实现我想要的目标,如果有人能给我一些建议,那将会非常有帮助。

谢谢,马可

java dependencies maven-2 maven exec-maven-plugin

5
推荐指数
1
解决办法
2302
查看次数

如何即时显示 exec-maven-plugin 的输出

我正在使用 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 控制台输出中即时查看 …

linux bash shell maven exec-maven-plugin

5
推荐指数
1
解决办法
7261
查看次数

exec-maven-plugin arguments 和 commandlineArgs 之间的区别

我正在尝试将 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)

java maven exec-maven-plugin

5
推荐指数
1
解决办法
4513
查看次数

maven wsdl2java 配置无法正常工作

我希望通过 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)

这个版本甚至没有被识别......想知道我是否错误地调用了插件,因为它甚至没有出现在任何带有详细日志记录的地方。 …

wsdl2java maven exec-maven-plugin cxf-codegen-plugin

5
推荐指数
1
解决办法
1万
查看次数

使用 maven-exec-plugin 运行命令行

我想使用 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-plugin pom.xml maven exec-maven-plugin pandoc

5
推荐指数
1
解决办法
7555
查看次数

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 …

maven-3 maven exec-maven-plugin

5
推荐指数
2
解决办法
4952
查看次数