3

我定义了以下事务管理器:

    <tx:annotation-driven transaction-manager="txManager" mode="aspectj" />

并具有以下根元素:

<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:tx="http://www.springframework.org/schema/tx"
   xsi:schemaLocation="http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
      http://www.springframework.org/schema/tx
      http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">

一切正常,但 IntelliJ 在mode="aspectj"上给了我一个错误标记, 说这是不允许的。我跟踪了它从哪里获取 xsd,它链接到 tx 2.0 xsd - 这解释了错误消息,因为我需要 2.5 才能使用模式注释。

是否有可能以某种方式给 IntelliJ 一个提示,我应该验证 2.5 而不是 2.0?

4

2 回答 2

8

如果schemaLocation根据此屏幕截图打开应该指向 xsd 的 jar 文件:

在此处输入图像描述

然后你会看到 IntelliJ 有一堆不同版本的 Spring 的 xsd 文件:

在此处输入图像描述

这意味着您确实拥有所需的所有模式。

如果您的 bean 定义文件有问题,那么您schemaLocation必须指向 Spring jar 文件中的错误版本:

在此处输入图像描述

检查Settings | Schemas and DTDs并确认您没有不小心手动将其设置为指向错误的 xsd 文件:

在此处输入图像描述 在此处输入图像描述

如果它是错误的,那么您将不得不使用减号删除该行。这将导致 IntelliJ 回到它的默认值:

在此处输入图像描述

之后,您应该会看到与第一个屏幕截图相同的内容。

于 2013-06-04T13:11:58.853 回答
1

我在尝试在同一个 xml 配置中使用 spring security 和 beans 时遇到了类似的问题。IntelliJ 坚持使用安全 xsd 2.0 版进行验证,尽管一切都告诉它使用 3.1 版。

通过更改安全性和 bean 之间的默认命名空间,我能够让 IntelliJ 弄清楚它。

我原来有:

<beans:beans xmlns="http://www.springframework.org/schema/security"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:beans="http://www.springframework.org/schema/beans"
   xsi:schemaLocation="
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security.xsd">

所以我把它改成:

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:security="http://www.springframework.org/schema/security"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security.xsd">

之后 IntelliJ 使用正确的 xsd 进行验证。我不确定这是 IntelliJ 的错误还是我做错了什么,但它现在可以工作了。

希望这对将来的某人有所帮助。

于 2013-12-18T18:24:21.650 回答