Конфликты в xwork и xwork-core

Я пытался интегрировать Struts 2 с Zero Configuration, Spring, Hibernate и Maven.

Но то, что я думаю, должно быть что-то, что мне не хватает в интеграции, и это должно быть связано с конфигурацией Maven Pom.xml:

<dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-core</artifactId>
    <version>2.1.8.1</version>
</dependency>

<!-- Struts 2 + Spring plugins -->
<dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-spring-plugin</artifactId>
    <version>2.1.8.1</version>
</dependency>

<!-- MySQL database driver -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.9</version>
</dependency>

<!-- Spring framework --> 
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring</artifactId>
    <version>2.5.6</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>2.5.6</version>
</dependency>

<!-- Hibernate core -->
<dependency>
    <groupId>asm</groupId>
    <artifactId>asm-all</artifactId>
    <version>3.3</version>
</dependency>
<dependency>
    <groupId>asm</groupId>
    <artifactId>asm</artifactId>
    <version>3.3</version>
</dependency>
    <dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>3.6.7.Final</version>
</dependency>

<!-- Hibernate core library dependency start -->

<!-- Hibernate core library dependency end -->

<!-- Hibernate query library dependency start -->
<dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-convention-plugin</artifactId>
    <version>2.1.8.1</version>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.0.1</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.15</version>
</dependency>

Как, когда я использую эту конфигурацию, это дает мне ошибку

java.lang.NoSuchMethodError: com.opensymphony.xwork2.util.finder.UrlSet.<init>(Lcom/opensymphony/xwork2/util/finder/ClassLoaderInterface;Ljava/util/Set;)V

И вместо opensymphony XWork libaray я использую зависимость

<dependency>
    <groupId>org.apache.struts.xwork</groupId>
    <artifactId>xwork-core</artifactId>
    <version>2.3.8</version>
</dependency> 

Это бросает мне это исключение

Caused by: Unable to load configuration. - [unknown location]
    at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:58)

1 ответ

Решение

При обновлении версии Struts2 необходимо обновить библиотеки, необходимые для вашего приложения, до целевой версии. Каждый дистрибутив Struts2 поставляется с соответствующим набором библиотек в lib папка, совместимая с версией дистрибутива. Если вы используете maven для разрешения и получения зависимостей, вы должны рассмотреть артефакт struts2-core,

<dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-core</artifactId>
    <version>2.3.8</version>
</dependency>

Он извлечет все необходимые зависимости для этого артефакта, другие зависимости, такие как плагины, которые нужно добавить отдельно. Используйте ту же версию, предназначенную для плагинов. Например, чтобы добавить плагин соглашения, используйте

<dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-convention-plugin</artifactId>
    <version>2.3.8</version>
</dependency>

Номер целевой версии, который я выбрал 2.3.8, но, возможно, он несовместим с другими функциями, такими как Hibernate и Spring, версии которых необходимо обновлять отдельно, добавляя соответствующие артефакты в зависимости.

И, наконец, самое трудоемкое - это изменения исходного кода проекта, обновление файлов конфигурации в соответствии с более новыми DTD, изменения API, исправление устареваний. Для этого подумайте о прочтении заметок о выпуске.


Также см. Пример разработки проекта Maven.

Другие вопросы по тегам