如何将项目根目录设置为自定义Maven Mojo插件的目标目录?

时间:2015-09-23 12:03:12

标签: maven

我已经编写了一个自定义Mojo插件来将zip文件解压缩到项目中的目录。 这是mojo类中的目标目录。

String destinationDirectory = "lib";

正常工作并创建目录并将zip的内容解压缩到文件中。

现在我想要的是将内容提取到项目的根目录中。

如果我给它一样,它就会出现错误,因为目标目录是空的。

String destinationDirectory = "";

我怎样才能完成这项工作?

以下是我为解压缩而创建的方法。

public void unpack(String zipFilePath, String destDirectory) throws IOException {



        File destDir = new File(destDirectory);

        //make the units directory if it is not exists.
        if (!destDir.exists()) {
            destDir.mkdir();
        }
        ZipInputStream zipIn = new ZipInputStream(new FileInputStream(zipFilePath));
        ZipEntry entry = zipIn.getNextEntry();

        // iterates over entries in the zip file
        while (entry != null) {
            String filePath = destDirectory + File.separator + entry.getName();
            if (!entry.isDirectory()) {
                // if the entry is a file, extracts it
                extractFile(zipIn, filePath);
            } else {
                // if the entry is a directory, make the directory
                File dir = new File(filePath);
                dir.mkdir();
            }
            zipIn.closeEntry();
            entry = zipIn.getNextEntry();
        }
        zipIn.close();
    }
    /**
     * Extracts a zip entry
     * @param zipIn  zip entry found in the main zip file
     * @param filePath destination directory of the zip entry
     * @throws IOException
     */
    private void extractFile(ZipInputStream zipIn, String filePath) throws IOException {
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(filePath));
        byte[] bytesIn = new byte[BUFFER_SIZE];
        int read = 0;
        while ((read = zipIn.read(bytesIn)) != -1) {
            bos.write(bytesIn, 0, read);
        }
        bos.close();
    }

如何在执行Mojo时在运行时获取现有项目的根目录?

1 个答案:

答案 0 :(得分:0)

我通过将dependency-plugin添加到src/main/resources/archetype-resources目录中的pom.xml来解决了这个问题。

由于maven-dependency-plugin是一个插件并且不能包含在原型中,另一方面,从原型创建的项目应该包括将zip文件解压缩到项目的能力I在项目pom中包含如下的依赖插件,如下所示,这是包含插件的正确位置。

<plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>truezip-maven-plugin</artifactId>
                <version>1.2</version>
                <executions>
                    <execution>
                        <id>copy-package</id>
                        <goals>
                            <goal>copy</goal>
                        </goals>
                        <phase>package</phase>
                        <configuration>
                            <verbose>true</verbose>
                            <fileset>
                                <!--This directory is to be modified-->
                                <directory>${path-to-the-zip-file}
                                </directory>
                                <outputDirectory>${project.basedir}</outputDirectory>
                            </fileset>
                        </configuration>
                    </execution>
                </executions>
            </plugin>