2011-08-01 4 views
8

빌드 스크립트에서 데이터베이스 작업을하고 있습니다. 모든 데이터베이스 세부 정보는 내 속성 파일에 있지만 사용자가 사용하는 세부 정보 집합을 쉽게 선택할 수있는 방법이 궁금합니다. 나는 Phing과 작업하고 있지만, Ant와 매우 흡사하기 때문에 Ant 응답도 받아 들일 것입니다. 내가 사용할 데이터베이스를 선택하기 위해 사용자에게 간단한 빌드 플래그를 제공하고 싶습니다Phing (및 Ant) 빌드 스크립트의 속성 선택

# Connection details for the dev database 
db.dev.hostname=localhost 
db.dev.database=foo 
db.dev.username=foo_user 
db.dev.password=foo_password 

# Connection details for the staging database 
db.staging.hostname=some.remote.server 
db.staging.database=bar 
db.staging.username=bar_user 
db.staging.password=bar_password 

:

여기 내 샘플 build.properties입니다. 데이터베이스 스키마를 검사하는 빌드 작업이 있다고 가정합니다. 다음과 같은 빌드 플래그를 제공하고 싶습니다.

phing -Ddatabase=staging check-schema 

데이터베이스 연결 세부 정보에는 db.staging. * 속성을 사용해야합니다. 그런 일을 어떻게 성취 할 수 있습니까?

답변

7

Phing 빌드 파일에서 속성을 중첩 할 수 있습니다. 그렇게하면 원하는 기능을 얻을 수 있습니다.

<?xml version="1.0"?> 
<project name="test" default="init"> 
    <property name="database" value="staging" /> 
    <property name="db.dev.hostname" value="localhost" /> 
    <property name="db.staging.hostname" value="some.remote.server" /> 
    <property name="db.hostname" value="${db.${database}.hostname}" /> 

    <target name="init"> 
    <echo msg="${db.hostname}" /> 
    </target> 
</project> 

는 또한 것들을 대신 -D 명령 줄 옵션을 지정하는 사용자를 위해 쉽게하기 위해 입력 태그에보고 할 수 있습니다 :

<input propertyname="database" validargs="dev,staging">Which database?</input> 
+0

신난다! 중첩 속성이 작동한다는 것을 알지 못했지만 (작동하지 않는 몇 가지 보고서를 발견 했으므로 결코 시도하지 않았습니다). 'input'에 관해서는, 나는 외부에서 다시 스크립트 할 수 있기 때문에 -D 플래그를 선호합니다 (예를 들어, Phit를 유튜브에 미리 연결하는 것에 대해 생각해보십시오). –