2009-05-19 3 views
4

나는 비교적 새로운 Java & maven에 익숙하다. 그래서 내 길을 알기 위해 나는 학습을위한 수단으로 프로젝트를하기로 결정했다. Java 의존 항생 권리가 바로

나는 꽤 일반적인 스택 포착 :

  • 자바 (주석) 1.6
  • 최대 절전 모드 (주석)
  • 의 JUnit 4
  • Tomcat을
  • 오라클 XE/In-mem hsqldb

내가 경험 한 가장 큰 문제점 중 하나는 안정된 환경을 얻으려면 jar 버전의 올바른 조합을 얻는 것입니다. 두 달 후에 나는 still fighting with의 문제입니다.

꽤 자주 예외가 발생하고 Spring 모듈 A x.x.x는 Hibernate 모듈 B y.y.y와 호환되지 않습니다. 또는 심지어 마찬가지로 일반적으로 스프링 모듈 Axxx는 스프링 모듈 BYyy와 호환되지 않습니다.

클린 슬레이트에서 시작하는 것이 예상됩니다. 버전 종속성은 최소화해야합니다. 최신 버전을 잡으면 모든 것이 작동합니다. . 그러나 그것은 사실이 아니었다.

maven을 사용하면이 프로세스가 단순 해지고 의심의 여지가 없습니다.

하지만 확실히 고통스럽지 않습니다. 나는 모듈 A가 모듈 B의 특정 버전을 요구한다면, 그것은 라인을 따라 어딘가에 시행되어야하고, certinaly는 단지 "noSuchMethod"라는 의미있는 메시지를 제공 할 것이라고 생각했을 것이다.

또한 이러한 문제를 발견하는 유일한 방법은 새로운 메소드 호출을 시도하고, 두려운 noSuchMethod 오류를 받고, 인터넷 검색을 시작하는 것입니다.

내가 필요로하는 것보다 나 자신을 더 어렵게 만든 길을 여기에 놓친 적이 있습니까?

참고로, 여기 내 POM의 종속성 섹션이 있습니다 ... 흠 잡을 데가없는 비표준이 있으면 알려주십시오!

<dependencies> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-api</artifactId> 
     <version>1.5.6</version> 
    </dependency> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-log4j12</artifactId> 
     <version>1.5.6</version> 
    </dependency> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.4</version> 
    </dependency> 
    <dependency> 
     <groupId>commons-lang</groupId> 
     <artifactId>commons-lang</artifactId> 
     <version>2.3</version> 
    </dependency> 
    <dependency> 
     <groupId>ojdbc</groupId> 
     <artifactId>ojdbc</artifactId> 
     <version>14</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.commons</groupId> 
     <artifactId>commons-io</artifactId> 
     <version>1.3.2</version> 
    </dependency> 
    <dependency> 
     <groupId>commons-io</groupId> 
     <artifactId>commons-io</artifactId> 
     <version>1.4</version> 
    </dependency> 
    <dependency><!-- java bytecode processor --> 
     <groupId>javassist</groupId> 
     <artifactId>javassist</artifactId> 
     <version>3.8.0.GA</version> 
    </dependency> 
    <dependency> 
     <groupId>commons-dbcp</groupId> 
     <artifactId>commons-dbcp</artifactId> 
     <version>1.2.1</version> 
    </dependency> 
    <dependency> 
     <groupId>hsqldb</groupId> 
     <artifactId>hsqldb</artifactId> 
     <version>1.8.0.7</version> 
    </dependency> 
    <dependency> 
     <groupId>org.dbunit</groupId> 
     <artifactId>dbunit</artifactId> 
     <version>2.4.4</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring</artifactId> 
     <version>2.5.6</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-test</artifactId> 
     <version>2.5.6</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-orm</artifactId> 
     <version>2.5.6</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-annotations</artifactId> 
     <version>3.4.0.GA</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-commons-annotations</artifactId> 
     <version>3.3.0.ga</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-core</artifactId> 
     <version>3.3.1.GA</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-validator</artifactId> 
     <version>3.1.0.GA</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-entitymanager</artifactId> 
     <version>3.4.0.GA</version> 
    </dependency> 

    <dependency> 
     <groupId>commons-lang</groupId> 
     <artifactId>commons-lang</artifactId> 
     <version>2.3</version> 
    </dependency> 
</dependencies> 

감사 마티

+1

오류의 예를 몇 가지 제공 할 수 있습니까? –

답변

2

도전 과제 중 하나는 각 패키지, 특히 봄에 무엇이 있는지를 결정하는 것입니다.

결국 Netbeans는 각 요구 사항에 따라 라이브러리를 가져 오는 방법을 알기 위해 maven에 대한 뛰어난 지원을 발견했습니다. 6.7 베타는 뛰어난 그래픽 트리를 포함하고 m2eclipse는 매우 훌륭한 그래픽 종속성 트리를 가지고 있습니다. 그 봄 오움에는 봄 콩, 봄 - 중핵, 봄 문맥 및 봄 - tx가 포함되어 있다는 것을 당신은 어떻게 알 것입니까? 명령 행에서 dependency plugin을 사용하여 종속성을 요청할 수 있지만 그래픽 표현은 매우 편리합니다. dependency:tree은 원하는 목표입니다. 분명히 Netbeans이나 Eclipse에서 실행할 수도 있습니다.

그래서, 당신의 충돌 중 하나의 예로서 :

<dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-annotations</artifactId> 
    <version>3.4.0.GA</version> 
</dependency> 

실제로 3.3 hibernate-commons-annotations-3.1.0.GA을하지 포함되어 있습니다. 또한 3.3.1.GA가 아닌 hibernate-core-3.3.0.SP1을 포함합니다.

"가장 큰"구성 요소부터 시작하여 이미 포함되어있는 부분을 확인하고 누락 된 부분 만 추가하기 시작합니다. 그렇더라도 중복되는 종속성이 없다고 다시 확인하고 필요하다면 대답에 표시된 것과 같이 중복을 제외하십시오. this question.

+0

FYI - Eclipse 용 m2eclipse 플러그인도 종속성을 그래프로 나타낼 수있다. –

+0

또한 mvn help를 사용할 수 있다고 생각한다 : 모든 종속성에 대한 분석 결과를 얻으려면 –

+0

나는 스프링과 함께 사용하기 위해 필요한 모듈을 결정한다는 것에 동의한다. 어려운. 어떤 패키지가 어떤 모듈의 일부인지를 지정하는 "맵"이 있다면 그것은 좋을 것입니다. 누구든지 그러한 참조를 알고 있습니까? –

0

이클립스를 사용하는 경우, 당신은 sonatype 여기 http://m2eclipse.sonatype.org/에서 받는다는 플러그인을 다운로드해야합니다.

종속성 (특히 transitive dependencies - POM에서 명시 적으로 정의하지 않은 종속성)을 그래픽으로 시각화하고 충돌하는 종속성을 보여줍니다.

업데이트 : 아래 코멘트에서 마일이 다를 수 있습니다.

+0

저는 잠시 동안 m2eclipse를 사용 해왔고, 특히 WTP와 중첩 된 모듈과 관련하여 꽤 색다른 것일 수 있습니다. 그러나 이러한 전이 의존성을 볼 수 있도록 POM 편집기를 설치해야한다고 생각했습니다. m2eclipse에서 처음 보았을 때 가장 먼저 해봤습니까? "java.lang.NoSuchMethodError". 나는 아이러니를 사랑해. –

+0

m2eclipse "목록보기"는 그래픽보기보다 훨씬 읽기 쉽습니다. 그리고 그것은 훨씬 더 좋은 상호 작용을합니다. 예 : 커먼즈 로깅을 클릭하면 범위가 좁혀지고이를 사용하는 장소 만 표시됩니다. –

+0

Eclipse에서 의존성 : 트리 목표를 실행 해보십시오. 그래픽 플러그인에 문제가있는 경우 도움이 될 것 같습니다. –