Создание отфильтрованных ресурсов из источников maven: выполнение jar

Я хотел бы создать файл jar с исходным кодом для своего проекта, поэтому я включил плагин maven-source. Однако я также использую подключаемый модуль фильтрации ресурсов, чтобы установить номер версии в файле свойств для моего проекта. Когда я создаю окончательный файл jar, файл свойств фильтруется и устанавливается версия. Однако в исходной банке все еще есть нефильтрованное свойство. Я хотел бы, чтобы плагин источников также вызывал фильтрацию ресурсов. Как я могу это сделать?

Вот (часть) моего pom.xml

    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
    </resources>

    <sourceDirectory>src/main/java</sourceDirectory>
    <testSourceDirectory>src/test/java</testSourceDirectory>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.5.1</version>
            <configuration>
                <source>${maven.compiler.source}</source>
                <target>${maven.compiler.target}</target>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-release-plugin</artifactId>
            <version>2.5.3</version>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-deploy-plugin</artifactId>
            <version>2.7</version>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-source-plugin</artifactId>
            <executions>
                <execution>
                    <id>attach-sources</id>
                    <goals>
                        <goal>jar</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <version>2.5</version>
            <configuration>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
    </plugins>
</build>

и вот файл свойств, который я хочу отфильтровать

version = ${project.version}

ИЗМЕНИТЬ

Для пояснения, корень моей проблемы в том, что у меня есть другой проект, который представляет собой проект GWT, созданный с использованием этой библиотеки. Часть требований проекта GWT заключается в том, что исходный код также должен быть доступен для всего, что будет скомпилировано в javascript на стороне клиента. Таким образом, этот проект содержит как скомпилированный файл jar, так и файл jar с исходным кодом в пути к классам.

Таким образом, теперь есть два файла свойств с одним и тем же путем и именем пакета, один существует в скомпилированном jar-файле, а другой — в исходном jar-файле.

Когда я пытаюсь прочитать этот файл, он, кажется, выбирает файл свойств из jar-файла с исходным кодом, который не был отфильтрован.


person Michael Kitzman    schedule 23.02.2017    source источник
comment
Исходный файл jar содержит исходный код вашего проекта, ничего не отфильтровано, ничего не скомпилировано и т. д. Помимо этого параметра <sourceDirectory> и <testSourceDirectory> не имеет смысла, потому что они установлены по умолчанию. (Конвенция важнее конфигурации).   -  person khmarbaise    schedule 23.02.2017
comment
@khmarbaise Спасибо, что указали на дублирующуюся информацию о конфигурации в моей помпе, я обязательно ее удалю. Я добавил дополнительную информацию о том, почему я хотел бы, чтобы исходные ресурсы jar были отфильтрованы. Я понимаю, что это технически неправильно, поэтому я добавил реальную проблему, с которой столкнулся.   -  person Michael Kitzman    schedule 23.02.2017
comment
Как насчет фильтрации свойства на этапе создания ресурса?   -  person Thomas Broyer    schedule 23.02.2017
comment
Или вместо фильтрации вы можете использовать свойства и получать к ним доступ с помощью System.getProperty. Пример здесь blob/master/pom.xml   -  person Ignacio Baca    schedule 24.02.2017
comment
@IgnacioBaca, использование System.getProperty сработало бы, если бы я запускал это через maven. Я не думаю, что это свойство сохранится, если я создам военный файл и разверну свой военный файл.   -  person Michael Kitzman    schedule 24.02.2017
comment
@ThomasBroyer Вам придется извинить мое невежество в Maven, но как мне привязать фильтрацию свойств к другому этапу?   -  person Michael Kitzman    schedule 24.02.2017


Ответы (1)


Обычно для этого используется maven-source-plugin. Однако я вижу в его документации, что вы не можете удалить src/main/resources из его обработки, одновременно добавляя target/classes в его цикл обработки (что вам нужно сделать, чтобы выполнить свою задачу)

Поэтому я думаю, что вам лучше всего использовать конфигурацию maven-assembly-plugin.

person Andrei    schedule 27.02.2017
comment
К сожалению, в настоящее время я просто устанавливаю номер версии вручную в своем файле свойств, пока не смогу определить хороший рабочий процесс. - person Michael Kitzman; 02.03.2017