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

伙计们,

我正在使用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"); } } 

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

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

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

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

预先感谢您的帮助。

问候,彼得

如果您遵循标准的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); } 

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

如果需要ImageIcon ,那么只需调用new ImageIcon(getImage("images/some-image.png"))

看看maven资源插件

我在maven项目的根目录中使用了我的图标,并且它没有被包含在生成的战争中。 通过大量的谷歌搜索,我从maven帮助页面获得了解决方案。

  org.apache.maven.plugins maven-war-plugin 3.0.0    ${project.basedir}   favicon.ico