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



伙计们,

我正在使用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 资源插件

最新更新