【问题标题】:Java w/ maven : getting sources from a jar fileJava w/ maven:从 jar 文件中获取源代码
【发布时间】:2011-02-09 10:53:52
【问题描述】:

我编写了一个 gui 应用程序,并使用图像文件 (gif) 作为图标。当我在我的 IDE 中运行应用程序时 - 会出现图标。当我从 jar 运行它时 - 它们失败(资源上的空指针异常)

包结构如下:

代码:src/main/java/com/my/app

资源:src/main/resources/com/my/app

我写了这个小例子:

       URL url ;

        url = GuiUtils.class.getResource("/com/my/app/gui/fading_lines_blue_64x64.gif");
        System.out.println("url: " + url);

        url = GuiUtils.class.getResource("/resources/com/my/app/gui/fading_lines_blue_64x64.gif");
        System.out.println("url: " + url);

从 IDE 运行时:

url: file:/C:/Repositories/V8/trunk/MyApp/build/com/my/app/gui/fading_lines_blue_64x64.gif
url: null

当从 Jar 中运行时:

url:null
url:jar:file:/C:/DevEnv/Projects/Viewer/testPicLoad.jar!/resources/com/cmy/app/gui/fading_lines_blue_64x64.gif

我是这样解决的,但这显然不是正确的方法:

public static URL getResourceURL(String path) {     
        URL url = GuiUtils.class.getResource(path);
        if (url == null) {
            url = GuiUtils.class.getResource("/resources"+path);
        }
        return url;
    }

建议?

【问题讨论】:

  • When ran from the Jar 你在这里做了什么?

标签: java jar


【解决方案1】:

第二个选项中的路径听起来不对。默认情况下,maven 应该将资源与编译的类一起放入目标/类中。 Jaring 应该接受所有这些,这就是为什么添加“/resources”对我来说听起来很奇怪。它应该在 testPicLoad.jar!/com/cmy 中找到 gif...

您在创建 jar 时是否在做一些奇怪的事情?

【讨论】:

  • /resources" sounds odd to me ,对我来说也是 :) @yossale 你怎么做你能解释一下
  • @Jigar 我使用 eclipse 来打包 jar (export..) - 这似乎是问题
  • @yossale:是的,我同意这就是问题所在。使用 Maven 构建 jar。毕竟,这就是它的目的。
【解决方案2】:

之所以会这样,是因为我是用eclipse打包jar的。我不知道为什么,但它是这样包装的。当我从命令行使用 maven 时,一切都很好。

【讨论】:

  • 啊,这就是你的答案。在处理 maven 项目时最好不要使用 Eclipse 进行打包。它不了解它们,也不了解如何打包它们并留下测试代码等。
猜你喜欢
  • 2011-07-03
  • 2015-09-08
  • 2021-04-01
  • 1970-01-01
  • 2019-11-08
  • 1970-01-01
  • 2018-06-19
  • 2016-12-31
  • 2020-12-31
相关资源
最近更新 更多