Настраиваемый context.xml для каждой среды с использованием maven - PullRequest
1 голос
/ 19 января 2012

У меня есть два файла context.xml в моем веб-проекте Java:

context.xml.development context.xml.production

, и я использую плагин maven war для его создания.

Когда я собираю проект, я бы хотел, чтобы maven скопировал соответствующий context.xml в каталог META-INF.

Как я мог это сделать?Я уже использую профили в моем pom.xml

Ответы [ 2 ]

4 голосов
/ 26 августа 2015

Другой подход (в случае, если вы его не учли) - использовать один файл context.xml с заполнителями.Например:

<Context>
<Resource name="jdbc/syncDB" auth="Container" type="javax.sql.DataSource"
           maxTotal="100" maxIdle="30" maxWaitMillis="10000"
           username="${database.username}" password="${database.password}" driverClassName="oracle.jdbc.OracleDriver"
           url="${database.url}"/>

</Context>

Затем добавьте плагин war в файл maven pom.xml, в котором папка META-INF является ресурсом, который фильтрует:

    <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <configuration>
                <webResources>
                    <resource>
                        <directory>src/main/webapp/META-INF</directory>
                        <filtering>true</filtering>
                        <targetPath>META-INF</targetPath>
                    </resource>
                </webResources>
            </configuration>
    </plugin>

Таким образомВы можете определить эти значения заполнителей как значения по умолчанию, которые могут быть переопределены для определенных профилей:

<properties>
    <database.password>default_user</database.password>
    <database.username>default_password</database.username>
    <database.url>jdbc:oracle:thin:@oracle.host:1521:defaultsid</database.url>
</properties>

<profiles>  
        <profile>   
            <id>dev</id>
            <properties>
                <database.url>jdbc:oracle:thin:@oracle.host:1521:DEVELOPMENTsid</database.url> 
            </properties>
        </profile>
</profiles>
1 голос
/ 20 января 2012

Сочетание профилей сборки maven и подключаемого модуля maven-war, использующего фильтрацию файлов для включения или исключения правильных файлов, должно помочь.

Например, что-то вроде этого:

<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">
<groupId>com.mycompany</groupId>
<artifactId>myproject</artifactId>
<profiles>
    <profile>
        <id>custom-profile</id>
        <activation>
            <property>
                <name>environment</name>
                <value>production</value>
            </property>
        </activation>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>2.1.1</version>
                    <configuration>
                        <webResources>
                            <resource>
                                <directory>resources</directory>
                                <excludes>
                                    <exclude>context.xml.development</exclude>
                                </excludes>
                            </resource>
                        </webResources>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </profile>
    <profile>
        <id>custom-profile2</id>
        <activation>
            <property>
                <name>environment</name>
                <value>development</value>
            </property>
        </activation>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>2.1.1</version>
                    <configuration>
                        <webResources>
                            <resource>
                                <directory>resources</directory>
                                <excludes>
                                    <exclude>context.xml.production</exclude>
                                </excludes>
                            </resource>
                        </webResources>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>

Тогда, когда вы запустите maven, обязательно отправьте свойство «environment» соответствующим образом:

mvn clean install -Denvironment=production

...