java - 自定义插件无法从 jar 复制文件,因为协议(protocol)是 "jar"

标签 java plugins sonarqube

我正在为 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) 的主要方法中运行它时,它打印出 C:\...\[Project Directory]\target\classes\images 但是当我将插件作为 Sonar 的“插件”文件夹中的 jar 文件夹安装到 SonarQube 中时,此方法打印出 null
我调查后发现,如果 url 参数具有"file"以外的协议(protocol),FileUtils.toFile(URL url) 将返回 null。所以我将这一行添加到我的方法中:System.out.println(inputUrl.getProtocol());
果然,在我的IDE中协议(protocol)是"file",但是当我的插件安装时协议(protocol)是“jar”!

我花了最后一天时间研究 Stack Overflow 和 Google 试图找到解决这个问题的方法,但无济于事。

我愿意尝试/重构任何东西。

我想要做的就是让我的插件从它的 jar 中复制一个目录到 SonarQube 的服务器。
我该怎么做?

如果相关,这是我项目中的目录(我想复制“图像”文件夹及其中的所有内容):

[Project Directory]
    |
    +--/src/main/resources
            |
            +--images
                 |
                 +--profiles
                          |
                          +--awards
                          |    |
                          |    +--Award1.png
                          |    |
                          |    +--Award2.png
                          |
                          +--projects
                               |
                               +--default.png

这是 SonarQube 服务器中要复制到的目录: [SONARQUBE_HOME]/war/sonar-server/images

最佳答案

当类路径中的资源(在本例中为图像或目录)来自 jar 时,它不再是物理文件

您需要修改代码,使其从 Stream 而不是 File 中读取这些资源


查看

关于java - 自定义插件无法从 jar 复制文件,因为协议(protocol)是 "jar",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17928722/

相关文章:

java - 如何在 JPA 中对底层数据库列进行反射

php - 如何使用 wordpress 转义功能来回显 Google Adsense 代码?

sonarqube - Sonar 分析后未填充代码覆盖率

java - SonarQube - "Serializable"类中的规则字段应该是 transient 的或可序列化的

java - <identifier> Java 中的预期编译错误[3]

java - TreeModel 真的有我想的那么糟糕吗?

java - 在 JAR 中加载 Grizzly/Jersey 服务器

plugins - 如何在 Intellij 15 中降级 Kotlin

python - 解决 vim 插件映射冲突 - 映射已经存在\t

c# - 网络核心: Do Static Classes need ISerializable from SonarQube?