LINUX.ORG.RU

Eclipse и фильтрация

 , , , maven-resources-plugin


0

1

Внимание - вопрос, это баг эклипса или фича и я чего-то не понимаю. Есть простейшее консольное приложение, задача которого пробежаться по fb2 файлам (включая те что лежат внутри архивов) и проверить являются ли они корректными xml и корректными fb2 + попробовать собрать информацию о том каким софтом были сделаны некорректные fb2 файлы на Java (да то ещё извращение, но что поделать, мне так удобнее, чем с шарпом в линуксе). Проект собирается при помощи maven. Заодно захотел поиграться с локализацией на Java. Структура проекта пока такая:

.
├── pom.xml
├── src
│   ├── main
│   │   ├── java
│   │   │   └── fb2dataminer
│   │   │       ├── ApplicationInfoProvider.java
│   │   │       └── Application.java
│   │   └── resources
│   │       └── localization
│   │           ├── MessagesBundle.properties
│   │           └── MessagesBundle_ru_RU.properties
│   └── test
│       ├── java
│       └── resources
└── target
    ├── classes
    │   ├── fb2dataminer
    │   │   ├── Application.class
    │   │   └── ApplicationInfoProvider.class
    │   ├── localization
    │   │   ├── MessagesBundle.properties
    │   │   └── MessagesBundle_ru_RU.properties
    │   ├── MessagesBundle.properties
    │   ├── MessagesBundle_ru_RU.properties
    │   └── META-INF
    │       ├── MANIFEST.MF
    │       └── maven
    │           └── ru.example.fb2-data-miner
    │               └── fb2-data-miner
    │                   ├── pom.properties
    │                   └── pom.xml
    └── test-classes
Класс ApplicationInfoProvider должен отдавать разную информацию о приложении: справка, версия, авторы, библиотеки и их версии и т.д.. Вся эта информация лежит в pom.xml, всё шло хорошо, пока я не захотел пробросить информацию из pom.xml в MessagesBundle.properties и MessagesBundle_ru_RU.properties, например, так:
help=Показывает справку\n\
и что-то ещё
version=${project.version}
В pom.xml у меня
<project xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>ru.example.fb2-data-miner</groupId>
	<artifactId>fb2-data-miner</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>fb2-data-miner</name>
	<description>Console application for collection statistics and data from fb2
		files</description>
	<properties>
		<java.version>25</java.version>
		<commons-cli.version>1.11.0</commons-cli.version>
		<maven-resources-plugin.version>3.4.0</maven-resources-plugin.version>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>
	<dependencies>
		<!-- https://mvnrepository.com/artifact/commons-cli/commons-cli -->
		<dependency>
			<groupId>commons-cli</groupId>
			<artifactId>commons-cli</artifactId>
			<version>${commons-cli.version}</version>
		</dependency>
	</dependencies>
	<build>
		<resources>
			<resource>
				<directory>src/main/resources/localization</directory>
				<filtering>true</filtering>
			</resource>
		</resources>
		<!-- проблемный плагин -->
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-resources-plugin</artifactId>
				<version>${maven-resources-plugin.version}</version>
				<configuration>
                			<encoding>${project.build.sourceEncoding}</encoding>
                			<propertiesEncoding>UTF-8</propertiesEncoding>
                		</configuration>
			</plugin>
		</plugins>
	</build>

</project>
А теперь внимание - вопрос: при сборке в target->classes создаются файлы MessagesBundle.properties и MessagesBundle_ru_RU.properties где правильно подставляются все значения. Но в target->classes->localization копируются файлы как есть, без всяких изменений. Разумеется после запуска из эклипса вместо версии 0.0.1-SNAPSHOT я вижу строку ${project.version}. Собственно я что-то не так настроил или это всё старые проблемы m2e плагина в Eclipse который ранее в 2014 году уже был замечен за подобным, т.к. его правила сборки и правила сборки maven немного разные, но вроде как было пофикшено с тех пор.

Обновление

По сути всё сводится к 2 проблемам - либо при отключении в Build Path /src/main/resources/localization (по идее надо отключать чтоб не бездумно копировалось как есть), то мы не можем подгрузить MessagesBundle_ru_RU.properties который появляется почему-то в target->classes а не в target->classes/localization (куда файл бездумно копируется если не исключить /src/main/resources/localization из Build Path)

★★★★★

Последнее исправление: peregrine (всего исправлений: 1)

Пофиксил. Надо было поменять

<directory>src/main/resources/localization</directory>
на
<directory>src/main/resources</directory>
Но с другой стороны а если я не хочу чтоб у меня все ресурсы подвергались фильтрации, а только конкретные, то как это сделать? Указание
<targetPath>src/main/resources/localization</targetPath>
Внутри
<configuration>
	<targetPath>src/main/resources/localization</targetPath>
        <encoding>${project.build.sourceEncoding}</encoding>
        <propertiesEncoding>UTF-8</propertiesEncoding>
</configuration>
Возвращает старое поведение, когда изменённые файлы идут в target->classes а не target->classes->localization

peregrine ★★★★★
() автор топика
Последнее исправление: peregrine (всего исправлений: 5)