0

为什么虽然我已经

  1. 在我的项目的 EJB 方面设置 JBoss EJB 部署描述符的正确路径

  2. 添加jboss-ejb3.xml到 Intellij 的工件 Patrac-web:war exploded 的 <output root>/WEB-INF

每当我对 pom.xml 进行最简单的更改时,Intellij 都会从以下条目中删除${PROJECT_DIR}/.idea/artifacts/Patrac_web_war_exploded.xml

<element id="file-copy" path="$PROJECT_DIR$/Patrac-ejb/src/main/resources/META-INF/jboss-ejb3.xml" />

并且,因此,jboss-ejb3.xml不会被复制到目标目录?

就好像每次我对pom.xmlIntellij 进行更改时,都会使用 POM “重新加载”部署配置,以覆盖我在 IDE 中所做的设置。也许是因为我没有从源目录pom.xml复制jboss-ejb3.xml到目标目录的条目,所以每当 Intellij“重新加载”时,我在 Intellij IDE 中所做的设置都会消失。纯粹是我的猜测,但这似乎正在发生。

如果是这样,我需要做出什么改变pom.xml才能让这种情况停止发生?

4

2 回答 2

2

当一个项目从 Maven (重新)导入时,IDEA 会配置它,当您从 IDEA 调用“构建”时,它会产生与 Maven 的“包”目标相同的结果。如果您需要将 jboss-ejb3.xml 复制到 WEB-INF,只需将其放在 'src/main/webapp/WEB-INF' 目录下,它将被 Maven 复制,IDEA 也是如此。

于 2013-02-06T08:17:37.650 回答
0

这是我尝试的 Nik 解决方案的替代方案,因为我想离开jboss-ejb3.xmlMETA-INF。 看了一下 maven 文档,它显示了如何将其jboss-ejb3.xml视为 Web 资源并将其复制到 WEB-INF 中,我在 maven-war-plugin 配置中添加了以下内容,问题得到解决。嗯,有点。但不是真的。

<webResources>
    <resource>
        <directory>../Patrac-ejb/src/main/resources/META-INF</directory>
        <includes>
            <include>jboss-ejb3.xml</include>
        </includes>
        <targetPath>WEB-INF</targetPath>
    </resource>
</webResources>

虽然这样做消除了摆弄 IDEA 方面配置设置的需要(因为 Maven 被配置为复制文件,而不是 IDEA),但引入了一个新问题:jboss-ejb3.xmlWAR 中出现了两个副本,一个在 WEB-INF 和EJB JAR 中的另一个(在 META-INF 中)。尽管没有明显的后果(应用程序运行得很好),但我宁愿不要在 EJB JAR 中放置描述符的副本。

使用Maven EJB 插件文档,我尝试将排除项添加到我的 maven-ejb-plugin 配置中,例如

<configuration>
    <ejbVersion>3.1</ejbVersion>
    <excludes>
        <exclude>**/jboss-ejb3.xml</exclude>
    </excludes>
</configuration>

这应该可以防止重复副本jboss-ejb3.xml出现在 EJB JAR META-INF 中,但它对我不起作用,在谷歌搜索“maven-ejb-plugin 排除无法正常工作”的各种变体后,我放弃了。

如果我可以让排除项工作,那么我会更喜欢这个解决方案而不是移动jboss-ejb3.xml到 src/main/webapp/WEB-INF 因为虽然这个解决方案稍微复杂一些(它需要两个 POM 中的额外 Maven 配置设置),但 EJB相关的描述符将保留在 EJB 模块中。

我决定使用 Nik 的解决方案,直到我可以解决排除问题。

于 2013-02-06T20:35:04.930 回答