2016-02-16 3 views
4

Мне нужно запустить команду, содержащую '<'.mvn exec: exec с '<' в командной строкеArgs

Я могу запустить его из командной строки, но он выдает ошибку, когда я помещаю ее в mvn exec.

Команда:

c:\apps\putty\plink.exe [email protected] -T -ssh -2 $SHELL /dev/stdin 'a b c d' < test.sh 

test.sh:

#!/bin/bash 
echo "execution parameters: [email protected]" 

выход Командная строка:

параметры исполнения: A B C D

pom.xml:

<plugin> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>exec-maven-plugin</artifactId> 
       <version>1.4.0</version> 
       <executions> 
        <execution> 
         <id>test</id> 
         <phase>pre-integration-test</phase> 
         <goals> 
          <goal>exec</goal> 
         </goals> 
         <configuration><executable>c:\apps\putty\plink.exe</executable> 
          <commandlineArgs>"[email protected] -T -ssh -2 $SHELL /dev/stdin 'a b c d' < test.sh"</commandlineArgs> 
         </configuration> 
        </execution> 
      </executions> 
     </plugin> 

Я попытался изменить '<' до '& ЛТ;', положив commandlineArgs в CDATA, положить doubleqoutes (") везде, но не мог получить эту работу.

[DEBUG] Executing command line: [c:\apps\putty\plink.exe, > [email protected] -T -ssh -2 -pw tomcat $SHELL /dev/stdin 'a b c d' &lt; test.sh] 
Unable to open connection: Host does not exist[INFO] 
------------------------------------------------------------------------ 
[INFO] BUILD FAILURE 

или:

[DEBUG] Executing command line: [c:\apps\putty\plink.exe, [email protected], -T, -ssh, -2, -pw, tomcat, $SHELL /dev /stdin 'a b c d' &lt; test.sh] 
bash: test.sh: No such file or directory [INFO] 
------------------------------------------------------------------------ 
[INFO] BUILD FAILURE 

Я заподозрить параметр '<', но я не уверен, что это реальная проблема.

Любые советы?

UPDATE: когда я говорю «Я попытался изменить„<“до„& л;“, положив commandlineArgs в CDATA, положить doubleqoutes (») везде, но не мог получить эту работу. "- я имею в виду его

+0

Пробовал: <[CDATA [MyUser @ MyHost -T -ssh -2 «$ SHELL/DEV/стандартного устройства ввода 'ABCD' < test.sh"]]> BTakacs

+0

также пытался: BTakacs

+0

Также попытался: BTakacs

ответ

1

Это работает, если я обернуть его внутри .bat файла:

@echo off 
set plinkExec=%1 
set env=%2 
set user=%3 
set pass=%4 
set shellPath=%5 
... 

%plinkExec% %user%@%env% -T -ssh -2 -pw %pass% $SHELL /dev/stdin '...' < %shellPath% 

Не красивый, но делает волшебство :-)

0

Существует разница между! система команды и команда оболочки. Труба и поток перенаправления являются оболочками синтаксиса.

команда системы обычно только запускает программу с заданными параметрами, такие, как

  • notepad.exe myfile.txt
  • java -jar my-program.jar

команды системы могут быть переданы простой вызов с некоторой exec функции различных API (java.lang.Runtime.getRuntime().exec(), обратные кавычки в PHP Явы, и т.д.).

Команды оболочки тогда являются специфическим синтаксисом оболочки, обрабатывающей его, и Maven не знает, какую оболочку вы используете.

Как правило, оболочки предоставляют возможность выполнить свою команду в качестве параметра для своего исполняемого файла. Поэтому, если вы хотите использовать команду оболочки, вам необходимо передать ее, например.как это:

  <configuration> 
       <executable>bash</executable> 
       <arguments> 
        <argument>-c</argument> 
        <argument>java -jar myprogram.jar <input.txt> output.txt</argument> 
       </arguments> 
      </configuration> 

для Windows, который будет

  <configuration> 
       <executable>path/to/cmd.exe</executable> 
       <arguments> 
        <argument>/C</argument> 
        <argument>java -jar myprogram.jar <input.txt> output.txt</argument> 
       </arguments> 
      </configuration> 

Вы могли бы использовать некоторые cross-platform shell, например, Groovy.

Надеюсь, что это поможет.

+0

Вы пропустили раздел артефакта плагина. Это рабочий пример с использованием 'exec-maven-plugin'? О groovy tip: Я уже нашел это: если вам нужно сделать что-то сложное с maven, тогда: a) вы используете неправильный инструмент; b) вы можете сделать это с помощью groovy-maven-plugin ;-) – BTakacs

+0

Да, это для стандартного плагина exec. Я не пробовал этот точный код, но я помню, что использовал это как для Linux, так и для окон. Эффективно он превращается в: 'bash" -c "" java ... "' –

0

Вы специально запросили mvn exec:exec. Но предполагая, что вам скорее нужно выполнить команду с перенаправлением, другой способ - использовать плагин, который может обрабатывать потоки самостоятельно, например. Maven Ant Plugin. Обратите внимание на input="...":

 <plugin> 
      <artifactId>maven-antrun-plugin</artifactId> 
      <version>1.8</version> 
      <executions> 
       <execution> 
        <phase>verify</phase> 
        <goals> <goal>run</goal> </goals> 
        <configuration> 
         <target name="run"> 
          <exec dir="${work.dir}" executable="java" input="input.txt"> 
           <arg value="-jar"/> 
           <arg file="${project.build.directory}/${project.build.finalName}.jar"/> 
          </exec> 
         </target> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin>    
+0

Ok :) Обновлено - добавлена ​​фаза, которая необходима, и пример того, как указать на банку, созданной сборкой. Приветствуем Будапешт из Брно. –

 Смежные вопросы

  • Нет связанных вопросов^_^