Maven упаковывает изображения в корень файла фляги

Folks,

Я разрабатываю приложение Java с использованием Eclipse. Maven используется для создания окончательного файла JAR.

В приложении я использую некоторые значки изображений для кнопок. Следуя некоторым инструкциям в Интернете, я создал «исходный» каталог, нажав на проект. Я назвал исходный каталог "res" и переместил мои изображения в этот каталог.

<code>
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");
  }
}
</code>

Это прекрасно работает, когда приложение не упаковано в файл jar (отлично подходит для отладки). Однако, когда maven упаковывает его, я вижу, что изображения помещаются в корневой каталог файла jar. Следующий звонок работает:

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

Мне интересно, есть ли какой-то шаг, который я пропустил.

Обратите внимание, что мне не нужно было делать ничего особенного с pom.xml для изображений. Maven автоматически подобрал их (за исключением того, что он помещает их в неправильное место).

Заранее спасибо за вашу помощь

Regards, Питер

Ответы на вопрос(3)

Решение Вопроса

то лучше поместить все не-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")) сделает свое дело.

 Peter06 мая 2012 г., 02:03
Это отлично сработало как внутри, так и снаружи банки. Спасибо большое за помощь. С уважением. Пите
 robben24 мая 2017 г., 15:31
Но зачем размещать его под ресурсами, а не через веб-приложение? Размещение его в ресурсах поместит изображения в файл класса в WEB-INF, что неправильно, потому что это статические файлы.

и он не был включен в сгенерированную войну. С большим количеством прибегая к помощи я получил решение со страницы помощи 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>

Ваш ответ на вопрос