2010-12-04 2 views
6

내가 기본 디렉토리를 속성을 변형 포함하기위한 것입니다 정의 등록 module.basedir와의 pom.xml 있습니다. 그것은 다음과 같이 정의된다 :

을 그리고 mgroovy 플러그인을 사용하여 실행되는 코드를 다음 있습니다 :

<source> 
    println project.properties['module.basedir'] 
    project.properties['module.basedir']=project.properties['module.basedir'].replace('\\','/'); 
    println project.properties['module.basedir'] 
</source> 

나중에 내가 다른 플러그인에서이 속성을 사용합니다. 이것은 플러그인 정의를 메이븐 프로파일로 옮길 때까지 잘 동작합니다. 그리고 maven 프로필이 활성화되면 mgroovy 플러그인은 잘 작동하지만 다음 플러그인에서 속성에 액세스 할 때 수정되지 않은 값을 얻습니다.

${module.basedir} 

이 프로필이 실행될 때이 프로젝트에 정의 된 속성의 자신의 복사본을 생성하고 플러그인에서 참조 할 때 사용되는 다음과 같습니다

이 내가이 속성에 액세스하는 방법입니다.

제안 사항?

답변

0
String path = '\\a\\b\\c' 
assert path.replaceAll('\\\\', '/') == '/a/b/c' 

그래서 당신이 줄 대체해야합니다

project.properties['module.basedir']=project.properties['module.basedir'].replace('\\\\','/'); 

당신이 4 백 슬래시를 필요로하는 이유

project.properties['module.basedir']=project.properties['module.basedir'].replace('\\','/'); 

을, 때문에 소스 문자열에 이중 백 슬래시의 각 (필자의 예에서는 path)를 이스케이프 처리해야합니다.

+0

이 경우가 아니므로 출력에서 ​​문자열이 변경된 것을 볼 수 있습니다. 요점은 ** print $ {module.basedir} **을 쓸 때 여전히 원래 값을 얻는다는 것입니다. –

2

EJB 모듈 설명을 작성하기 위해 창에서 gmaven-plugin을 사용하여 동일한 문제가 발생했습니다. Groovy에 익숙하지 않지만이 접근법은 저에게 효과적입니다.

def basedir = project.properties['module.basedir'].replace('\\','/') 
def md = (basedir + "/target/module.xml" as File)