2011-09-19 3 views
1

Maven 프로젝트 내부에서 프로그래밍 방식으로 일부 경로를 수집해야합니다. 특히 프로젝트 아티팩트를 참조해야합니다. 사용Java에서 Maven 프로젝트 경로 참조

URL MyClass.class.getClassLoader().getResource(String name) 

프로젝트 타겟/클래스 폴더의 경로의 상대적인 작동하지만 이슈가 대상 폴더에 앉는 이후는이를 참조 할 수 없다.

System.getProperty("user.dir") + "/target" 

같은 경로는 적어도 대상 폴더 이름, 표준 동안 안전하게 이식 할 수 없습니다 있다는 사실을 전혀 나를 설득하지 않습니다.

상대 경로를 이용하는 Maven 인식 라이브러리 솔루션이 있습니까?

+0

가 맥락화하기 :

내 프로젝트 중 하나의 예입니다 //team.ops4j : 나는 [팍스 시험 (HTTP의 경우 (하위) 프로젝트 아티팩트의로드를 자동화하기 위해 노력하고 있습니다. org/wiki/display/paxexam/Pax + Exam) 통합 테스트. 설치가 Maven 라이프 사이클에서 더 내려 가기 때문에 "베어"파일 시스템 경로에서로드해야합니다. –

+0

* 대상 * 폴더 이름 중 휴대용이 아닌 부분은 무엇입니까? 디렉토리 구분 부분, 또는 프로젝트의 출력 디렉토리가 프로젝트 POM에서 변경 될 수 있다는 사실? –

+1

나는 프로젝트 출력 디렉토리를 사용자 정의 할 수 있음을 언급했다. –

답변

1

MavenProperties은 maven war 플러그인 또는 maven jar 플러그인에서 사용하는 maven archiver을 사용하여 매니페스트 파일에 쓸 수 있습니다.

웹 응용 프로그램이있는 경우 web.xml 파일에도 일부 정보를 전달할 수 있습니다.

from pom.xml: 
------------------------------------------------ 
<properties> 
    <maven.build.timestamp.format>dd.MM.yyyy' 'HH:mm:ss</maven.build.timestamp.format> 
    <build-version>${env.SVN_REVISION}</build-version> 
    <build-date>${maven.build.timestamp}</build-date> 
</properties> 
. 
. 
. 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-war-plugin</artifactId> 
       <version>2.0.2</version> 
       <configuration> 
        <webResources>  
         <webResource> 
          <directory>${basedir}/src/main/webapp/WEB-INF</directory> 
          <includes> 
           <include>web.xml</include> 
          </includes> 
          <targetPath>WEB-INF</targetPath> 
          <filtering>true</filtering> 
         </webResource> 
        </webResources> 

from web.xml: 
------------------------------------------------ 
<context-param> 
    <param-name>BUILD_VERSION</param-name> 
    <param-value>${build-version}</param-value> 
</context-param> 
<context-param> 
    <param-name>BUILD_DATE</param-name> 
    <param-value>${build-date}</param-value> 
</context-param> 
+0

이것은 사용자 지정 속성을 가져올 수 있으므로 훌륭한 일반 솔루션입니다. 필자는 [properties-maven-plugin] (http://mojo.codehaus.org/properties-maven-plugin/plugin-info.html)도 이러한 특정 접근법을 활성화한다는 것을 알았습니다. 그러나 필자가 필요로하는 정보는 이미 POM의 어딘가에 있기 때문에 추가 속성을 정의하는 것이 나에게는 불필요한 것처럼 보입니다. –

+0

''$ {project.build.outputDirectory}'는 "target/classes"디렉토리에 대한 경로로 귀결되지 않습니다. 그것은 내가 게시 한 첫 번째 링크의 "뒤에"있었던 maven 속성 중 하나입니다. – Christopher

+0

네, 더 정확하게는, '$ {project.build.directory}'입니다. 그것은 요점이 아닙니다. 내가 제공 한 두 번째 링크에서 ** 추가 ** Manifest를 빌드 할 수 있는지 여부는 명확하지 않으므로 궁극적으로 패키지 될 링크를 오염시키지 않습니다. 필요한 정보는 테스트 용입니다. –