2016-08-19 2 views
1

프로젝트 종속 관계를 유지하고 프로젝트의 리소스 폴더에있는 미리 정의 된 XML 파일에 프로젝트 종속성 중 하나의 이슈 이름을 써야하는 경우가 있습니다. 예를 들어 predefind.xml -Maven을 사용하여 XML 파일을 작성하는 방법은 무엇입니까?

<project> 
    <projectName>somename</projectName> 
    <projectjar> 
     <name>some.jar</name> 
    </projectjar> 
    <dependantJarsInfo> 
     <folderName>dependant_jars</folderName> 
     <dependantJars> 
      <name>dependency.jar</name> 
     </dependantJars> 
    </dependantJarsInfo>  
</plugin> 

의 pom.xml 내가 종속성 1.2.0 = 1.2.0 최신 및 미리 정의 된 주어진에 쓰기처럼 전체 이름을 얻을 필요가

<project> 
    <groupId>com.mycom</groupId> 
    <artifactId>someproject</artifactId> 
    <packaging>jar</packaging> 
    <version>5.8.0.0</version> 

    <dependencies> 

     <dependency> 
      <groupId>com.mycom.</groupId> 
      <artifactId>dependency</artifactId> 
      <version>LATEST</version> 
     </dependency> 

    </dependencies> 

</project> 

지정된 태그에서 .xml 파일.

 <dependantJars> 
      <name>dependency.jar</name> 
     </dependantJars> 

예, 그렇다면 어떻게 될까요? 만약 아니라면이 문제를 해결하기 위해 어떤 대안을 택해야합니까?

+0

pom에 의존성 버전을 쓰는 정확한 문제점은 무엇입니까? 이 접근법으로 무엇을 해결하려고합니까? – khmarbaise

+0

khmarbaise는 응답을 주셔서 감사합니다. 우리는 빌드 통합 시스템을 지속적으로 구현했습니다. 가장 최근의 핵심 단어 메이븐을 사용하여 종속 빌드의 마지막 빌드 버전을 찾았습니다. 그 이유는 우리가 pom에서 가정 종속성을 검증하지 않았고, 네가 내 요점을 알기를 바랍니다. – Afgan

답변

0

얘들 아 내가 이것에 대한 해결책을 가지고이 문제에 대한 연구를하고 후. 두 개의 메이븐 플러그인을 사용하여 해결했습니다. 이 플러그인의

  1. 받는다는 - 종속성 - 플러그인
  2. gmaven - 플러그인

사용 -이 어떤 일을 도움이 될 것입니다

<plugin> 
<groupId>org.apache.maven.plugins</groupId> 
<artifactId>maven-dependency-plugin</artifactId> 
<version>2.9</version> 
<executions> 
    <execution> 
     <id>build-classpath</id> 
     <phase>validate</phase> 
     <goals> 
      <goal>build-classpath</goal> 
     </goals> 
     <configuration> 
     <outputFile>target/classPath.txt</outputFile> 
      <includeArtifactIds> 
       dependency 
      </includeArtifactIds> 
     </configuration> 
    </execution> 
</executions> 
</plugin> 

<plugin> 
    <groupId>org.codehaus.groovy.maven</groupId> 
    <artifactId>gmaven-plugin</artifactId> 
    <executions> 
     <execution> 
      <id>groovy-magic</id> 
      <phase>prepare-package</phase> 
      <goals> 
       <goal>execute</goal> 
      </goals> 
      <configuration> 

       <source> 
        def theInfoName = "target/classPath.txt"; 
        File theInfoFile = new File(theInfoName) 
        def words 
        def key 
        def value 
        if (!theInfoFile.exists()) { 
        println "File does not exist" 
        } else { 
        theInfoFile.eachLine { line -> 
        if (line.trim().size() == 0) { 
        return null 
        } else { 
        words = line 
        File theInfoFileto = new File(words) 
        ant.replace(file: "target/classes/myPackagepath/predefind.xml", token: "dependency.jar", value: theInfoFileto.getName()) 
        } 
        } 
}         
       </source> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

희망.

0

나는 실제로 문제에 대한 잘못된 접근법을 생각합니다. 대신 Maven Properties을 사용해보세요.

당신은 당신의 pom.xml에서 페이지의 이름을 정의 : 당신이 명령 줄을 패키지의 이름을 변경하고자 할 때

다음
<project> 

    <properties> 
    <package.name>dependency.jar</package.name> 
    </properties> 

</project> 

, 당신이 그것을 대체 할 수 있습니다 :

mvn -Dpackage.name=othername package ... 

그러나 패키지 이름을 덮어 쓰지 않으면 기본값을 그대로 사용할 수 있습니다. 이것에 대해 당신의 pom.xml

mvn package ... 

다른 SO 문제의 정의 :

+0

Mickaël B 답변 주셔서 감사하지만 문제는 pom.xml에서 어떤 것을 가져 오거나 업데이트하는 것이 아닙니다. 런타임에 maven의 종속성 세부 정보를 받아 내 predefined.xml 파일에 삽입하면됩니다. – Afgan

관련 문제