首页 > 解决方案 > 在参数中使用带有连字符的 maven exec 插件

问题描述

我正在尝试从 maven 执行 npm 构建,但是在正确获取命令行参数时遇到问题。

我正在使用以下代码段

<execution>
    <id>npm run build (compile)</id>
    <goals>
        <goal>exec</goal>
    </goals>
    <phase>compile</phase>
    <configuration>
        <executable>npm</executable>
        <workingDirectory>${my.source.directory}</workingDirectory>  
        <arguments>
            <argument>run</argument>
            <argument>build</argument>
            <argument>--base-href</argument>
            <argument>/my-base-href/</argument>
        </arguments>
    </configuration>
</execution>

我已经尝试了<argument>'s 的几种变体,但它们都不起作用。

<argument>--base-href</argument>
<argument>/my-base-href/</argument>
or
<argument>-base-href</argument>
<argument>/my-base-href/</argument>
or
<argument>"--base-href"</argument>
<argument>/my-base-href/</argument>
or
<argument><![CDATA[--base-href]]></argument>
<argument>/my-base-href/</argument>
or
<commandlineArgs>run build --base-href /my-base-href/</commandlineArgs> (instead of <arguments>)

leads to
$ npm build "/my-base-href/"
problem: missing '--base-href'
<argument>"--base-href /my-base-href/"</argument>

leads to
$ npm build
problem: missing '--base-href "/my-base-href/"'
<argument>&hyphen;&hyphen;base-href</argument>
<argument>/my-base-href/</argument>

leads to
problem: pom error, could not resolve entity named 'hyphen' (same with &dash;)
<argument>\-\-base-href</argument>
<argument>/my-base-href/</argument>
leads to
$ ng build "\-\-base-href" "/my-base-href/"
problem: escape chars ending up in command

这里发生了什么?为什么 maven 会从开头吃掉这个论点,--我怎样才能让它变得不那么好吃?

(尝试使用 windows 8.1、maven 3.3.9 和 3.5.4、exec 插件 1.3.9 和 1.6.0)

标签: mavennpmcommand-line-argumentsmaven-plugin

解决方案


我不确定是否完全相同,但我需要将 --coverage 标志传递给测试运行。为了得到这个,我最终需要先给--npm run test -- --coverage

        <argument>run</argument>
        <argument>test</argument>
        <argument>--</argument>
        <argument>--coverage</argument>

推荐阅读