2017-12-31 19 views
0

프로젝트 B에 따라 프로젝트 A가 있습니다. 프로젝트 B를 git repo에서 다운로드했고, 프로젝트 B에 "mvn package"와 "mvn install"을 실행했습니다. 내 ~/.m2/repository 디렉토리에 있습니다.Maven에서 의존성으로 써드 파티 프로젝트 사용하기

"jar-with-dependencies"로 프로젝트 A를 패키징하려고 시도했지만 완벽하게 작동하지만 모든 종속성이있는 큰 항아리를 원하지 않습니다.

나는이 넣을 때 :

<dependency> 
     <groupId>ch.usi.da</groupId> 
     <artifactId>paxos</artifactId> 
     <version>trunk</version> 
</dependency> 

명령 "MVN 패키지"잘 작동하지만 난 그것을 실행하려고하면

java -cp target/basecast-1.0-SNAPSHOT.jar ar.uba.dc.basecast.App 

을 내가 스레드에 예외를 얻었다 "기본"자바를 .lang.NoClassDefFoundError : ch/usi/da/paxos/Util 오류.

Eclipse를 사용하지 않고 maven에서만이 작업을 수행합니다. 나는 그것을 단순하게 유지하고 무대 뒤에서 어떤 일이 일어나고 있는지 배우고 싶다. 아마도 이클립스가 더 나은 방법으로 클래스 패스를 관리 할 것이지만 나는 그것없이 그것을하고 싶다.

업데이트 :이 제 3 자 프로젝트 B에는 많은 의존성이 있다는 것을 잊었습니다. 따라서 .jar 파일을 "lib"로 포함하는 것이 이상적인 해결책이 아닙니다. 모든 것이 로컬 저장소에 설치되기 때문에 maven dependencies resolution을 사용하고 싶습니다.

+0

음 ... 당신은 jar-with-dependencies를 만들었고 모든 것이 작동하지만 당신은 의존성이있는 항아리가 없다고 말합니까? 그 자체로 모순처럼 들리는가? 당신은 당신이 무엇을 해결하려고하는지 더 자세하게 설명 할 수 있습니까? – khmarbaise

+0

죄송합니다. 저는 영어가 모국어가 아닌 사람입니다. "jar-with-dependencies"옵션으로 컴파일 할 때 모든 항목이 포함 된 큰 항아리를 성공적으로 생성하고 완벽하게 작동합니다. 내가 말하고자했던 것은이 큰 항아리가 해결책이되기를 원하지 않는다는 것입니다. 사용자가 시스템에 설치된 모든 의존성 (예 : 로컬 repo 사용)을 갖고 maven이 마법을 수행하게하고 싶습니다. –

+0

아니에요. 전혀 문제 없습니다. 흠 .. 당신은 사용자에게 jar-with-dependencies가 통계적으로 간단하다는 간단한 해결책을 제공하고 싶습니다. 사용자가 Maven을 설치/사용하도록 강요하면 실행 솔루션을 얻을 수 있습니다. 당신이 appassembler-maven-plugin 등을 통해 물건을 배달 할 수있는 더 간단한 해결책을 만들 수는 있지만 그 유스 케이스에 달려 있다고 생각합니다. – khmarbaise

답변

0

뚱뚱한 항아리 (여러 가지 이유가있을 수 있음)를 원하지 않으면 먼저 응용 프로그램을 시작하는 방법을 제공하기 위해 사용하려는 다른 메커니즘을 결정해야합니다. 일반적으로 사용하는 모든 아티팩트를 가리키는 Class-Path 엔트리를 가진 실행 가능한 jar 파일을 만들거나 다양한 정신병 트릭을 수행 할 수있는 쉘 스크립트를 만든 다음 사용하는 모든 아티팩트를 가리키는 classpath 변수를 어셈블하거나 MacOS에서 - 응용 프로그램 패키지. 고급 배포에는 WebStart가 포함될 수 있습니다.

현재의 기술 수준에서 좋은 솔루션은 이러한 좌표를 가지고 appassembler - 받는다는 - 플러그인을 사용하는 것입니다

  <groupId>org.codehaus.mojo</groupId> 
      <artifactId>appassembler-maven-plugin</artifactId> 
      <version>1.10</version> 

하는 모두 유닉스에서 (당신이 필요로하는 스크립트를 만들 수있는 적절한 구성 섹션 및 Windows)를 사용하면 올바른 장소에서 사용하는 아티팩트를 일반 Maven 빌드의 일부로 넣을 수 있습니다.

자세한 내용은 http://www.mojohaus.org/appassembler/appassembler-maven-plugin/assemble-mojo.html 을 참조하십시오.

+0

답변 해 주셔서 감사합니다. 아마도 Maven에서 저장소가 어떻게 작동하는지 오해했을 것입니다. 설치된 저장소가 로컬 저장소에 있는지 확인하고 사용할 것이라고 생각했습니다. appassembler-maven-plugin을 점검 할 것입니다. –

+0

아, 그냥 maven 명령 줄에서 직접 실행하고 싶습니다. 비록 당신이 다른 사람들에게 당신의 일을 배포 할지라도. pom.xml 파일에 작은 설정 스 니펫을 넣으면'mvn -q exec : java'를 사용할 수 있습니다. 이 작은 프로젝트를위한 pom.xml의'exec-maven-plugin' 섹션을 참조하십시오. https://github.com/ravn/dagger2-hello-world (내가 썼습니다) –

+0

아마도 Eclipse를 피하는 것이 복잡 할 수 있습니다. 프로젝트 B는 .classpath 파일을 가지고 있습니다 (나는 이클립스에 의해 생성된다). 의존성을 찾는 데 도움이된다. 이 https://maven.apache.org/guides/getting-started/index.html#How_do_I_use_external_dependencies에 따르면 Maven은 로컬 저장소를 살펴 본다. 왜 내 aproach가 작동하지 않는지 알 수 없다. 누군가가 Maven에 대한 상세한 문서를 줄 수 있다면 나는 행복 할 것이다. –

관련 문제