Рекурсивное определение свойств maven - PullRequest
4 голосов
/ 25 октября 2010

Мы пытаемся перестроить наше модульное здание Maven.Мы ввели свойство DEPLOYMENT_ENV, которое может быть «prod», «dev», «staging», или что нет.Менталитет, который мы использовали, заключался в том, что мы могли бы определить, скажем:

dev.jdbc.username = yoyodyne
dev.jdbc.password = 0verthruster
staging.jdb.username = cavaliers
staging.jdbc.password = 8thdim

Там, где это, похоже, сломалось, это кормление конфигураций плагина maven.Например, DBUnit нужно имя пользователя.Семантически решение, которое мы имели в виду, выглядело как ниже, однако maven не допускает рекурсивные определения свойств таким образом:

<configuration>
    <username>${${DEPLOYMENT_ENV}.jdbc.username}</username>
</configuration>

Любые идеи для параметризации сборок maven, такие, что мы можем сохранить наш большой огромныйцентральный список определений свойств?

Ответы [ 2 ]

1 голос
/ 26 октября 2010

Не могли бы вы немного подробнее рассказать о проблеме, с которой вы столкнулись?У вас есть ошибка?

Я уже использовал это определение рекурсивного свойства в одном из моих pom.xml, в плагине antrun <configuration>, и он хорошо работает:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>1.2</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>run</goal>
                    </goals>
                    <configuration>
                        <tasks>
                            ...
                            <ftp server="${my-ftp-url}" userid="${ftp-${appli}-${env}-username}" password="${ftp-${appli}-${env}-password}"
                                remotedir="${remoteDir}/sources" passive="yes">
                                <fileset dir="../target/">
                                    <include name="*.tar.gz"/>
                                </fileset>
                            </ftp>
                            ...

Как вы можете видеть в этом фрагменте кода, я использую свойство ${ftp-${appli}-${env}-username}, где ${appli}, ${env} и ${ftp-xxx-yyy-username} - это свойства, которые приходят из командной строки или settings.xml.

В любом случае, так какПредложенный Евгением Кулешовым, я бы выбрал набор <profiles>, который только определяет некоторые свойства, используя теги <properties> или внешний файл свойств:

<build>
    <plugins>
        <!-- Properties loader -->
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>properties-maven-plugin</artifactId>
            <version>1.0-alpha-1</version>
            <executions>
                <execution>
                    <phase>initialize</phase>
                    <goals>
                        <goal>read-project-properties</goal>
                    </goals>
                    <configuration>
                        <files>
                            <file>${basedir}/${env-properties-file}</file>
                        </files>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
...
<profiles>
    <!-- Development -->
    <profile>
        <id>dev</id>
        <activation>
            <activeByDefault>true</activeByDefault>
            <property>
                <name>env</name>
                <value>dev</value>
            </property>
        </activation>
        <properties>
            <env-properties-file>dev-environment.properties</env-properties-file>
        </properties>
    </profile>

    <!-- Homologation -->
    <profile>
        <id>hom</id>
        <activation>
            <activeByDefault>false</activeByDefault>
            <property>
                <name>env</name>
                <value>hom</value>
            </property>
        </activation>
        <properties>
            <env-properties-file>homologation-environment.properties</env-properties-file>
        </properties>
    </profile>
    ...
1 голос
/ 25 октября 2010

Вместо разных имен свойств вы можете просто использовать одни и те же свойства, но объявлять их в разных профилях, либо в pom.xml, либо в settings.xml

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