[컴] maven 에서 filter 를 이용해서 parameterize 해보자.

parameterize  / 변수를 사용해서 치환 / 변수 치환하기 /



Resource filtering

자동적으로 변수를 찾아서 값으로 치환해 주는 것은 maven-resources-plugin 에 의해서 수행된다.

build time 에 maven 이 ${...} 로 된 변수를 값으로 치환하도록 하기 위해서는 아래부분을 setting 해줘야 한다.

build.resources.resource.filtering = true
build.resources.resource.directory = src/main/


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


Webapp resource filtering

위에서 이야기하는 resource 는 WEB-INF/classes 에 있는 녀석들이다. src/main/webapp 안에 있는 resource 들의 설정은 따로 해줘야 한다고 한다.[ref. 2]
maven 에서는 이녀석들에 대한 설정이 maven-war-plugin 를 통해서 가능하다고 한다. 그래서 plugin 안에 있는 configuration 에서 설정해 줘야 한다.


<plugin>
 <groupId>org.apache.maven.plugins</groupId>
 <artifactId>maven-war-plugin</artifactId>
 <version>2.0.2</version>
 <configuration>
   <webResources>
     <resource>
       <filtering>true</filtering>
       <directory>src/main/webapp</directory>
       <includes>
         <include>META-INF/context.xml</include>
         <!-- include any other file types you want to filter -->
       </includes>
     </resource>
   </webResources>
 </configuration>
</plugin>

나의 경우에는

  • src/main/webapp/META-INF/context.xml

의 몇몇 값을 변수로 사용하고 싶었다. 그래서 위와 같은 maven 설정을 추가해 줬다. 만약 profile 별로 다른 값을 set 하고 싶다면 profile 안에 설정해 주면 될 것이다.



maven example


<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>
    <groupId>com.springapp</groupId>
    <artifactId>newui</artifactId>
    <packaging>war</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>newui</name>

    <properties>
        <spring.version>3.2.11.RELEASE</spring.version>
        <spring.security.version>3.2.3.RELEASE</spring.security.version>
        <portal.type>user</portal.type>
        <sourceEncoding>UTF-8</sourceEncoding>

        <db.host>10.10.224.106</db.host>
        <db.port>3306</db.port>
    </properties>

    <dependencies>
        <!-- Spring framework -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        ...
    </dependencies>

    <build>

        <finalName>newui</finalName>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                    <encoding>${sourceEncoding}</encoding>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.4</version>
                <configuration>
                    <webResources>
                        <resource>
                            <filtering>true</filtering>
                            <directory>src/main/webapp</directory>
                            <includes>
                                <include>META-INF/context.xml</include>
                                <!-- include any other file types you want to filter -->
                            </includes>
                        </resource>
                    </webResources>
                </configuration>
            </plugin>
           
        </plugins>
    </build>


    <profiles>

        <profile>
            <id>rup</id>
            <activation>
                <property>
                    <name>portal.type</name>
                    <value>user</value>
                </property>
            </activation>
            <build>
                <finalName>newui_rup</finalName>
                <plugins>
                    <plugin>
                        <artifactId>maven-war-plugin</artifactId>
                        <version>2.5</version>
                        <!-- To exclude admin pages -->
                        <configuration>
                            <packagingExcludes>WEB-INF/pages/admin/**</packagingExcludes>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
</project>


References

  1. How do I filter resource files to include the values of properties?
  2. Using Maven profiles and resource filtering

댓글 없음:

댓글 쓰기