我已经编写了一个自定义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时在运行时获取现有项目的根目录?
答案 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>