Maven exec插件将参数传递给外部可执行文件

时间:2015-04-16 10:19:09

标签: java maven apache-spark build maven-plugin

我正在尝试将我的应用配置为仅使用mvn package exec:exec

我想要的是构建.jar并将其提交给外部二进制文件,我可以在mvn package之后手动执行,但我希望它是自动的。我认为maven exec插件是要走的路。

我目前的配置是:

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>exec-maven-plugin</artifactId>
  <version>1.4.0</version>
  <executions>
    <execution>
      <goals>
        <goal>exec</goal>
      </goals>
    </execution>
  </executions>
  <configuration>
    <executable>
      /bin/spark-submit
    </executable>
    <arguments>
      <argument>
         --class "package.Class" --master "local[4]" ${project.build.directory}/${project.build.finalName}.${packaging}                 
      </argument>
    </arguments>
  </configuration>
</plugin>

它的作用是执行(来自maven DEBUG信息):

/bin/spark-submit, --class "package.Class" --master "local[4]" myApp.jar

我认为问题是,参数意味着传递给java可执行文件,因此它们被逗号分隔,执行shell命令时我不想要它。

我尝试的另一件事是拆分参数:

<arguments>
  <argument>--class "package.Class"</argument>
  <argument>--master "local[4]"</argument>
  <argument>${project.build.directory}/${project.build.finalName}.${packaging}</argument>
</arguments>

执行:

/bin/spark-submit, --class "package.Class", --master "local[4]", myApp.jar

(更多逗号,不是我想要的)

我想要maven执行:

/bin/spark-submit --class "package.Class" --master "local[4]" myApp.jar

我希望使用maven exec插件可以完成我想要的东西,我的问题可以很好理解。我非常感谢你能给我的任何帮助。

2 个答案:

答案 0 :(得分:2)

我发现有一个可选的配置参数<commandlineArgs>,它完全符合我的需要。

所以对我来说正确的配置是:

...
<configuration>
  <executable>
    /bin/spark-submit
  </executable>
  <commandlineArgs>
    --class "package.Class" --master "local[4]" ${project.build.directory}/${project.build.finalName}.${packaging}
  </commandlineArgs>
</configuration>
...

答案 1 :(得分:0)

这也有效:

<configuration>
<executable>/Users/mike/Applns/apache/spark/spark-3.0.0-bin-hadoop3.2/bin/spark-submit</executable>
<arguments>
    <argument>--master</argument>
    <argument>local</argument>
    <argument>${project.build.directory}/${project.artifactId}-${project.version}.jar</argument>
</arguments>