2015-04-27 4 views
1

У меня есть . My.zip файл под проект target/ папка.Команда Linux (unzip -p) работает с exec-maven-plugin

MyProject/ 
    -target/ 
      -my.zip 
    -pom.xml 

Внутри my.zip есть файл с именем names.txt. Если я запускаю команду Линукса под корнем проекта:

unzip -p target/my.zip names.txt > target/names.txt 

я успешно получить names.txt извлеченных в target/ папку:

MyProject/ 
    -target/ 
      -my.zip 
      -names.txt 
    -pom.xml 

Я хочу, чтобы выполнить ту же команду с exec-maven-plugin, определенными в П .xml.

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>exec-maven-plugin</artifactId> 
    <version>1.4.0</version> 
    <executions> 
     <execution> 
      <id>get names.txt</id> 
      <phase>package</phase> 
      <goals> 
      <goal>exec</goal> 
      </goals> 
      <configuration> 
      <!-- define the command to execute --> 
      <executable>unzip</executable> 
      <arguments> 
       <commandlineArgs>-p target/my.zip names.txt > target/names.txt</commandlineArgs> 
       </arguments> 
      </configuration> 
     </execution> 
     </executions> 
    </plugin> 

Но когда я бегу maven clean install, он не создает names.txt, терминал показывает мне разархивировать справки документ вместо:

UnZip 5.52 of 28 February 2005, by Info-ZIP. Maintained by C. Spieler. Send 
bug reports using http://www.info-zip.org/zip-bug.html; see README for details. 

Usage: unzip [-Z] [-opts[modifiers]] file[.zip] [list] [-x xlist] [-d exdir] 
    Default action is to extract files in list, except those in xlist, to exdir; 
    file[.zip] may be a wildcard. -Z => ZipInfo mode ("unzip -Z" for usage). 

    -p extract files to pipe, no messages  -l list files (short format) 
    -f freshen existing files, create none -t test compressed archive 

почему? Как я могу заставить его работать с exec-maven-plugin?

ответ

1

> недействительный вариант для unzip. > или перенаправление stdout - это функция оболочки, которую вы используете для выполнения команды. Это означает, что оболочка увидит >, разделите ее и следующий аргумент, создайте новый процесс для unzip, перенаправьте stdout нового процесса и запустите его.

exec-maven-plugin не использует оболочку; вместо этого он использует тот же API, который оболочка использует внутренне для создания новых процессов. Это означает, что начнется unzip, найдите странные параметры из командной строки и закройте с ошибкой.

Чтобы исправить это, запустите executable/bin/sh или /bin/bash с

<commandlineArgs>-c unzip -p target/my.zip names.txt &gt; target/names.txt</commandlineArgs> 

Обратите внимание, что вы действительно должны HTML избежать >.

Чтобы избежать всех этих проблем, вы можете поместить эти команды в сценарий оболочки и выполнить это или использовать Maven AntRun Plugin и the unzip task.

+0

Пробовал с '>' вместо '>', он не работает ни – user842225

+0

@ user842225: Это не единственное, что вам нужно изменить. –

+0

@ Аарон, я не хотел, чтобы вы обновили свой ответ, добавив '-c unzip', но он тоже не работает. – user842225

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