2017-09-09 3 views
4

공통 부모 프로젝트의 하위 프로젝트가 두 개 있습니다. 또한 생성기 프로젝트와 해당 생성기 용 Maven 플러그인 프로젝트가 있습니다. 또한, 두 자식 프로젝트 코드 생성에 사용되는 것과 동일한 입력 파일을 사용 :Maven : 프로젝트 간 소스 공유

발전기 플러그인 사내 만든 메이븐 플러그인
parent: pom 
    child1: jar 
    src/main/generator/input.gen 
    child2: jar 
    src/main/generator/input.gen 
    generator: jar 
    generator-plugin: maven-plugin 

:

@Mojo(name = "generate", defaultPhase = LifecyclePhase.GENERATE_SOURCES, threadSafe = true) 
public class GeneratorPlugin extends AbstractMojo { 
    @Parameter(required = true, readonly = true, defaultValue = "${project}") 
    private MavenProject project; 
    @Parameter(required = true, defaultValue = "${project.basedir}/src/main/generator/input.gen") 
    private File   input; 

    ... 

}

Currenlty, 은 src/main/generator/input.gen, child1child2에 중복됩니다. 이것은 문제입니다. input.gen의 버전을 하나만 갖고 싶습니다.

프로젝트를 어떻게 구성해야합니까? 두 자식 프로젝트의 poom에있는 generator-plugin 플러그인의 <configuration><input>...</input></configuration>에서이 공유 사본을 어떻게 참조해야합니까?

+0

먼저 소스 코드가 변경 될 때마다 플러그인을 실행하는 것을 의미하는 버전 제어에 체크인되기 때문에 'src'에 리소스 등을 생성하지 않습니다. 가장 좋은 위치는'target' 디렉토리에 물건을 생성하는 것입니다. 이것은 기본적으로 버전 관리에 의해 무시됩니다. 또한 생성 된 자원은 결과 jar 파일로 패키지화되며, 여기에서 다른 모듈이 클래스 경로에 의해 자원에 액세스 할 수 있습니다. – khmarbaise

+1

@khmarbaise 오해 또는 혼란이 있다고 생각합니다. 'input.gen'은 입력 자원이고, 생성자에 의해 클래스가 생성되어야하는 스키마, 모델 등의 정의를 포함합니다. 즉, 자원을 생성하지 않습니다. –

+0

아, 이제 알겠습니다. 내 사이트에서 미안합니다. 그러나 이것은'input.gen'을 포함하는 모듈 하나와이 파일에서 클래스를 생성하는 적절한 플러그인을 가져야 함을 의미합니다. 결과적으로 다른 모듈에서 재사용 할 수있는 jar 파일을 얻을 수 있습니다. 아무 것도 복사하지 않고 ... – khmarbaise

답변

3

Maven Remote Resources Plugin이 당신이 원하는 것일 수 있습니다.

여기에 example입니다.

+0

감사합니다. 나는 그것을 밖으로 시도하고 알려 드리겠습니다! –

+0

이것은 훌륭했습니다! 고마워 Pruce. –

0
필자는 (테스트하지) 될 수

:

  • 추가 파일에 추가/입력으로 대신 클래스 패스 리소스를 허용하도록 발전기를 수정 src/main/resources
  • 에 공유 의존성에 input.gen를 넣어 input.gen과 공유 종속성은 범위이므로 최종 제품에 포함되지 않습니다.
+0

두 번째 단계를 수행하는 방법을 자세히 설명해 주시겠습니까? –

+1

예. 입력 경로를'String'으로 취한 다음'getClass(). getResourceAsStream()'을 호출하여'InputStream'을 연관시킵니다. –

+0

감사합니다. 영리한 아이디어. 비록이 문제에 대한 전용 플러그인이므로 다른 제안을 선호합니다. –