Maven在jar文件的根目录中打包图像

Pet*_*ter 3 java eclipse maven

伙计们,

我正在使用Eclipse开发Java应用程序.Maven用于创建最终的jar文件.

在应用程序中,我使用了一些图像图标作为按钮.按照Internet上的一些说明,我通过单击项目创建了一个"源"目录.我将源目录命名为"res",并将我的图像移动到此目录.


public static ImageIcon getIcon() {
  if (isThisJarfile()) {
     URL url = this.class.getResources("/res/myicon.png");
     return new ImageIcon(url);
  }else {
     return new ImageIcon("/res/myicon.png");
  }
}
Run Code Online (Sandbox Code Playgroud)

当应用程序未打包为jar文件(非常适合调试)时,这可以正常工作.但是,当maven打包它时,我看到图像被放在jar文件的根目录中.以下呼叫有效:

    URL url = this.class.getResource("/myicon.png");

我想知道是否有一些我忽略的步骤.

请注意,我没有必要对pom.xml执行任何特殊操作.Maven会自动拾取它们(除非它将它们放在错误的位置).

预先感谢您的帮助.

问候,彼得

01e*_*1es 7

如果您遵循标准的Maven项目目录结构,那么最好将所有非Java资源放在其下src/main/resources.例如,您可以创建一个子目录images,以便完整路径src/main/resources/images.该目录将包含您的所有应用程序映像.

在打包应用程序时,应特别注意正确访问图像.例如,以下函数应该执行您需要的所有操作.

public static Image getImage(final String pathAndFileName) {
    final URL url = Thread.currentThread().getContextClassLoader().getResource(pathAndFileName);
    return Toolkit.getDefaultToolkit().getImage(url);
}
Run Code Online (Sandbox Code Playgroud)

此函数可用作在图像目录中getImage("images/some-image.png")加载some-image.png文件.

如果ImageIcon需要,那么简单地调用new ImageIcon(getImage("images/some-image.png"))就可以了.