我正在为SonarQube开发一个插件,它必须做的部分是将文件从自身复制到SonarQube服务器的目录。我正在使用Apache Commons IO,并且发现FileUtils.copyDirectory
非常有效(在使用main方法测试之后)。
问题来自于尝试从插件本身的jar中获取我想要复制的文件目录。我试过这个:
public File getSrcDir() {
URL inputUrl = getClass().getResource("/images");
File srcDir = FileUtils.toFile(inputUrl);
System.out.println(srcDir);
return srcDir;
}
当我在IDE(Eclipse)中的main方法中运行它时,它打印出C:\...\[Project Directory]\target\classes\images
但是当我将SonarQube插件作为一个jar文件夹安装到Sonar的“plugins”文件夹中时,此方法打印出null
。
我调查并发现如果url参数的协议不是“File”,FileUtils.toFile(URL url)
将返回null。所以我将这一行添加到我的方法中:System.out.println(inputUrl.getProtocol());
果然,在我的IDE中协议是“文件”,但是当我的插件安装时,协议是“jar”!
我花了最后一天倒在Stack Overflow和谷歌试图找到解决这个问题的方法,但无济于事。
我愿意尝试/重构任何东西。
/>我想做的就是让我的插件将一个目录从它的jar中复制到SonarQube的服务器。
我怎么能这样做?
如果它是相关的,这是我的项目中的目录(我想复制“images”文件夹及其中的所有内容):
[Project Directory]
|
+--/src/main/resources
|
+--images
|
+--profiles
|
+--awards
| |
| +--Award1.png
| |
| +--Award2.png
|
+--projects
|
+--default.png
以下是要在SonarQube服务器中复制的目录:
[SONARQUBE_HOME]/war/sonar-server/images
答案 0 :(得分:1)
当classpath中的资源(在本例中是图像或目录)来自jar时,它不再是物理文件
您需要修改代码,以便从Stream
而不是File
查看强>