Maven ресурсы фильтрация - PullRequest
       0

Maven ресурсы фильтрация

0 голосов
/ 05 февраля 2019

Я хотел бы записать информацию о сборке в файл свойств.Я нашел Maven плагин фильтрации ресурсов.Вот как выглядит моя часть, относящаяся к pom:

<?xml version="1.0" encoding="UTF-8"?>
<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 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>project.mygroup</groupId>
        <artifactId>prject</artifactId>
        <version>1.0-20190130-1</version>
    </parent>

    <artifactId>project-war</artifactId>
    <packaging>war</packaging>
    <version>1.0-20190130-1</version>

    <properties>

        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

        <timestamp>${maven.build.timestamp}</timestamp>
        <maven.build.timestamp.format>
        yyy-MM-dd HH:mm
        </maven.build.timestamp.format>

    </properties>

    <dependencies>
    ...
    </dependencies>

    <build>
        <finalName>project</finalName>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>

        <plugins>
            <!-- Create war from the project -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>

            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <configuration>
                    <encoding>${project.build.sourceEncoding}</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <version>2.4.3</version>
                <configuration>
                    <encoding>${project.build.sourceEncoding}</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>    

</project>

Если запустить mvn clean package, сборка прошла успешно, но мой build.properties файл в каталоге src / main / resources не будет содержать информацию о сборке.

Мой файл свойств выглядит так:

build.version=${pom.version}
build.date=${timestamp}
build.url=${pom.url}
build.name=${pom.name}

Что я делаю не так?Спасибо!

1 Ответ

0 голосов
/ 05 февраля 2019

Расширенный комментарий / короткий ответ:

Вы должны смотреть на target/classes ... , а не на src/main/resources !;)

...файлы в src/main/resources остаются нефильтрованными / не тронутыми.


О, хорошо.Извините, я могу найти файл свойств в папке target / classes.Но как мне прочитать этот файл свойств из моего приложения?

Пожалуйста, см. Также здесь: - Где разместить и как читать файлы ресурсов конфигурации в сервлете на основеприложение?

.. со "стандартной" Java:

// assuming src/main/resources/build.properties
Properties buildProps = new Properties();
buildProps.load(
    //this is fail safe for most situations (test/web container/...), but *any classloader* could do it.
            Thread.currentThread().getContextClassLoader()
                    .getResourceAsStream("build.properties")
);
String buildDate = buildProps.getProperty("build.date");

.. с (например) пружиной:

@PropertySource("classpath:/build.properties")
...
@Value("${build.date}")
String buildDate;

Но , так как вы пометили (у вас должен быть очень конкретный и «изощренный» способ сделать это (загрузить свойства в приложение)), поэтому мы должны спросить!:) (см .: http://www.adam -bien.com / roller / abien / entry / injecting_properties_into_java_ee )


Спасибо, теперь все в порядке, но время сборкиштамп выглядит не так: yyyy-MM-dd ЧЧ: мм У меня есть такой формат: 1549362759203 Есть идеи?

Хммм, пока что не знаю, ... для меня это работает как положено, сгенерированный:

build.date=2019-02-05 10:55

.. и (отредактированный) код Properties.load().

(Возможно, вы "перезаписали" timestampсвойство ... и это звучит не так, как очень хорошее (индивидуальное) имя свойства (потому что any1 / thing (can) может ссылаться на "timestamp", лучше что-то вроде com.my.company.myVerySpecialTimestamp!?;) И: Посмотрите на target/classes/build.properties сообщает вам, что испортилось:

  • фильтрация ресурсов maven
  • или загрузка свойства (в вашем коде)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...