Maven将图像打包到jar文件根目录中

4

大家好,

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

在这个应用程序中,我为按钮使用了一些图像图标。遵循互联网上的一些指示,我通过单击项目创建了一个“source”目录。我将我的图像移动到这个目录并将其命名为“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会自动检测它们(除了它将它们放置在错误的位置)。

谢谢您的帮助。

敬礼, Peter

3个回答

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);
}

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

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


这在jar内外都完美运行。非常感谢您的帮助。敬礼,彼得 - Peter
但为什么要把它放在资源文件夹而不是webapp文件夹下呢?将其放置在资源文件夹下会将图像放置在WEB-INF的类文件中,这并不正确,因为这些是静态文件。 - robben

0

我将我的网站图标放在了Maven项目的根目录下,但它并没有被包含在生成的WAR文件中。经过大量的搜索,我从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>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接