2

我在一个名为output. zip里面包含3个文件。

Project root/
    -output/
        -my.zip
    pom.xml

my.zip(包含 names.txt、schools.txt、teacher.txt)。

如何从 zip中仅提取names.txtoutput/并将其放在maven中?

===我试过的:===

我可以通过从项目根目录运行命令来实现它:

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

但是当我尝试使用exec-maven-plugin& 运行 maven 时:

<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>
                <executable>unzip</executable>
                <commandlineArgs>-p output/my.zip names.txt > output/names.txt</commandlineArgs> 
            </configuration>
        </execution>
    </executions>
</plugin>

我总是无法使用 exec-maven-plugin执行目标

我的exec-maven-plugin配置有什么问题,以及在 Maven 中实现它的任何其他方法?

4

3 回答 3

3

你应该看看maven-dependenc-plugin它提供了一个目标unpack

<project>
   [...]
   <build>
     <plugins>
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-dependency-plugin</artifactId>
         <version>2.10</version>
         <executions>
           <execution>
             <id>unpack</id>
             <phase>package</phase>
             <goals>
               <goal>unpack</goal>
             </goals>
             <configuration>
               <artifactItems>
                 <artifactItem>
                   <groupId>junit</groupId>
                   <artifactId>junit</artifactId>
                   <version>3.8.1</version>
                   <type>jar</type>
                   <overWrite>false</overWrite>
                   <outputDirectory>${project.build.directory}/alternateLocation</outputDirectory>
                   <destFileName>optional-new-name.jar</destFileName>
                   <includes>**/*.class,**/*.xml</includes>
                   <excludes>**/*test.class</excludes>
                 </artifactItem>
               </artifactItems>
               <includes>**/*.java</includes>
               <excludes>**/*.properties</excludes>
               <outputDirectory>${project.build.directory}/wars</outputDirectory>
               <overWriteReleases>false</overWriteReleases>
               <overWriteSnapshots>true</overWriteSnapshots>
             </configuration>
           </execution>
         </executions>
       </plugin>
     </plugins>
   </build>
   [...]
 </project>
于 2015-04-22T14:09:54.860 回答
1

你可以用 来做到这一点maven-antrun-plugin,通过这个例子,我想你会得到你的答案。

<plugin>
    <artifactId>maven-antrun-plugin</artifactId>
    <executions>
        <execution>
            <phase>package</phase>
            <configuration>
                <tasks>
                    <unzip src="${project.basedir}/output/test.zip" dest="${project.basedir}/output/unzip">
                        <patternset>
                            <include name="**/*.xml"/>
                        </patternset>
                    </unzip>
                </tasks>
            </configuration>
            <goals>
                <goal>run</goal>
            </goals>
        </execution>
    </executions>
</plugin>
于 2015-04-22T21:15:59.953 回答
0

这可能是因为commandLineArgs正在给予方式。

例如:根据插件文档,标准输出应使用可选参数“outputFile”进行定向

http://mojo.codehaus.org/exec-maven-plugin/exec-mojo.html#outputFile

尝试执行一些简单的命令,比如pwdorls -la然后回到你的unzip例子。

更新:

您可能还需要查看使用 XML CDATA 提供参数

<sampleTag>
<![CDATA[
    Some text with > and <
 ]]>
</sampleTag>
于 2015-04-22T21:26:25.313 回答