[Maven] properties내용을 command창에서 바로 입력하기

Published on: 2013. 11. 14. 14:14 by louis.dev
Maven에서는 .properties파일 또는 pom.xml에 직접 <properties>를 통하여 DB의 접속정보라던지, 특정 dependency의 버전이라던지 하는 설정정보를 저장하여 관리할수 있다.(properties에 관한 자세한 내용은 여기에서) 이렇게 저장된 데이터들 중 pom.xml이나 properties파일에 직접 저장하기 껄끄러운데이터들이 있을 수 있다. 예를 들어 telnet이나 ftp에 로그인하기 위한 아이디와 패스워드 정보들은 pom.xml이나 .properties에 텍스트형태로 저장하게 되면 다른사람에게 그대로 노출이되어 보안에 취약하게 된다. 이런 껄끄러운 데이터들은 파일에 직접 저장하는 것이 아니라 Maven의 goal을 실행할때 파라미터로 전달하는 방법을 사용하면 된다. 아래의 설정은 Maven의 ant plugin으로 FTP를 사용하여 파일을 업로드하는 설정이다. 구체적으로 설명하지 않았지만 중요하게 봐야할 점은 FTP업로드시 userid와 password를 properties를 사용하게끔 설정했다는 것이다.
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-antrun-plugin</artifactId>
  <executions>
    <execution>
      <id>ftp</id>
      <phase>install</phase>
      <configuration>
        <tasks>
          <echo>SendFTP</echo>
          <ftp action="send" server="SERVERIP"
              remotedir="/a/b" userid="${ftp.userid}"
              password="${ftp.password}" depends="no"
              verbose="yes" binary="yes">
              <fileset dir="modules/my-module/target">
                <include name="my-static-file.zip" />
              </fileset>
            </ftp>
        </tasks>
      </configuration>
      <goals>
        <goal>run</goal>
      </goals>
    </execution>
  </executions>
  <dependencies>
    <dependency>
      <groupId>ant</groupId>
      <artifactId>ant-commons-net</artifactId>
      <version>1.6.5</version>
    </dependency>
    <dependency>
      <groupId>commons-net</groupId>
      <artifactId>commons-net</artifactId>
      <version>1.4.1</version>
    </dependency>
  </dependencies>
</plugin>
그리고 package goal을 실행할때 다음과 같이 입력한다.
$mvn package -Dftp.userid=krespo -Dftp.password=myftppassword
위에서 보듯이 ${ftp.userid}에는 krespo가 ${ftp.password}에는 myftppassword가 들어가는것을 확인해 보지 않고도 알수가 있다. 이렇듯 파라미터로 정보를 넘기려면
-D{key}={value}
형태로만 넣으면 어떠한 값이라도 동적으로 전달할 수 있게 된다.