我有一个功能(见下文)可以从其自己的 JAR 中复制特定文件夹的所有文件。
对于这个功能(也见下文),我想编写测试,但测试将在构建 JAR 之前执行(它是一个 maven 项目)。
此函数的一个重要部分是它只知道文件夹名称,但不知道该文件夹中的文件,因此它必须“查询”它们。
问题是,“查询”一个文件夹中所有文件的 API 是不同的,无论它们是在 JAR(生产)上还是在文件系统(测试)上工作。
我的问题是:
- 如何测试依赖于尚未存在的 JAR 的功能,
- 或者如何“组合”这些功能(如何决定它必须是 JAR 还是非 JAR 方式),
- 或者(那将是最好的)有没有处理这个主题的(小库)?
第一种方法用于jar。 (制作)
这是对 Copy directory from a jar file 的一个稍微修改的版本:
public class RessourcesUtil {
...
public static void copyResourcesFromJar((String nameOfResourceDirectory,
File destinationDirectory) throws IOException {
String jarPath = RessourcesUtil.class.getProtectionDomain().getCodeSource().
getLocation().getFile();
Enumeration<JarEntry> jarEntries = new JarFile(jarPath).entries();
while (jarEntries.hasMoreElements()) {
JarEntry fileFromJar = (JarEntry) jarEntries.nextElement();
if (fileFromJar.getName().startsWith(nameOfJarDirectory)) {
String plainFileName = fileFromJar.getName().
replaceAll(nameOfJarDirectory, "");
File fileToCreate =
new File(destinationDirectory + File.separator + plainFileName);
if (fileFromJar.isDirectory()) {
fileToCreate.mkdir();
continue;
}
createFile(jarFile.getInputStream(fileFromJar), fileToCreate);
}
}
}
private static void createFile(InputStream inputStream,
File fileToWrite) throws IOException {
try (FileOutputStream fos = new FileOutputStream(fileToWrite)) {
IOUtils.copy(inputStream, fos);
}
}
}
其次,如果资源未打包在 jar 中(用于测试):
public class RessourcesUtil {
public static void copyResourcesFromFileSystem(String nameOfResourceDirectory,
File destinationDirectory) throws IOException {
String classDir = RessourcesUtil.class.getProtectionDomain().getCodeSource().
getLocation().getPath();
File srcDir = new File(classDir + File.separator + nameOfResourceDirectory);
FileUtils.copyDirectory(new File(srcDir.getPath()), destinationDirectory);
}
...
}
两者都有效,但仅在打包或未打包的情况下有效。
背景:
对于一个项目,我在 Eclipse 中编写了一个多模块 Maven 插件,它也可以作为一个独立的插件使用。
我的资源与我的主要资源或我的 mojo 在不同的模块中。
现在我需要在每次运行时将资源中的特定文件夹从我的项目复制到不同的文件夹中。
附言
通过 getResourcesAsStream 从资源中复制每个文件不是一种选择。
最佳答案
试试这个方法,
将您的 Maven 构建为两个部分 第一部分排除要复制文件的文件夹,所以一旦完成这一部分,您就可以准备好 jars
第二部分执行您的复制代码,该代码从 jar 中获取输入并将其移动到指定的不同文件夹。
关于java - 如何测试从其自己的 JAR 文件中复制文件夹的功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30524786/