Я относительно новичок в Java и maven, и поэтому, чтобы познакомиться с ними, я решил сделать проект как средство обучения.
Я выбрал довольно общий стек:
- Java 1.6
- Hibernate (с аннотациями)
- Весна (с аннотациями)
- JUnit 4
- Tomcat
- Oracle XE / In-mem hsqldb
На сегодняшний день одной из самых больших проблем, с которыми я столкнулся, является правильное сочетание версий jar для получения стабильной среды. Это проблема, с которой я все еще борюсь с более двух месяцев спустя.
Довольно часто я получаю исключения noSuchMethod или classNotFound, и оказывается, что модуль Spring A x.x.x не совместим с модулем Hibernate B y.y.y. Или даже, как обычно, пружинный модуль A x.x.x не совместим с пружинным модулем B y.y.y
Я ожидал, что начиная с чистого листа, зависимости от версии должны быть минимальными - просто возьмите последнюю версию, и все должно работать ... но это не так.
Я ожидал, что использование maven упростит этот процесс, и, без сомнения, это так.
Но это, безусловно, будет далеко не безболезненно. Я бы подумал, что если для модуля A требуется конкретная версия модуля B, он должен выполняться где-то вдоль линии, и certinaly предоставляет более значимые сообщения, которые просто "noSuchMethod".
Кроме того, кажется, что единственный способ обнаружить эти проблемы - это попробовать новый вызов метода, получить страшную ошибку noSuchMethod и начать поиск в Google.
Я что-то упустил по пути здесь, что сделало это более трудным для меня, чем это должно было быть?
Для справки, вот раздел зависимостей моего 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>
Спасибо
Marty