伙计们,
我正在使用Eclipse开发一个Java应用程序。Maven 用于创建最终的 jar 文件。
在应用程序中,我使用了一些图像图标作为按钮。按照互联网上的一些说明,我通过单击项目创建了一个"源"目录。我将源目录命名为"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")
,以便在映像目录中加载some-image.png
文件。
如果需要ImageIcon
那么只需调用new ImageIcon(getImage("images/some-image.png"))
就可以了。
我的图标在 maven 项目的根目录中,它没有包含在生成的战争中。通过大量的谷歌搜索,我从 maven 帮助页面获得了解决方案。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<webResources>
<resource>
<directory>${project.basedir}</directory>
<!-- the list has a default value of ** -->
<includes>
<include>favicon.ico</include>
</includes>
</resource>
</webResources>
</configuration>
</plugin>
看看 maven 资源插件