Intellij:jboss-ejb3.xml条目从$ {PROJECT_DIR} /。idea / artifacts / XXX_war_exploded.xml中消失

时间:2013-01-23 21:18:48

标签: maven intellij-idea java-ee-6

为什么我是

  1. 在项目的EJB facet中设置JBoss EJB部署描述符的正确路径

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

  3. 每当我对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.xml Intellij进行更改时,使用POM重新加载“部署配置”以覆盖我在IDE中进行的设置。也许是因为我的pom.xml中没有用于将jboss-ejb3.xml从源目录复制到目标目录的条目,我在Intellij IDE中创建的设置会在Intellij“重新加载”时不断消失。对我而言纯粹的猜想,但这似乎正在发生。

    如果是这样,我需要对pom.xml进行哪些更改才能停止此操作?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

以下是我尝试过的Nik解决方案的替代方案,因为我想将jboss-ejb3.xml留在META-INF中。 Taking a look at the maven documentation,其中显示了如何将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.xml副本WAR,一个在WEB-INF中,另一个在EJB JAR中(在META-INF中)。虽然没有明显的后果(应用程序运行得很好)但我更喜欢没有位于EJB JAR内的描述符的副本。

使用Maven EJB plugin documentation,我尝试在maven-ejb-plugin配置中添加一个排除项,例如。

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

这应该会阻止{J} META-INF中出现jboss-ejb3.xml的重复副本,但它对我不起作用,并且在搜索“maven-ejb-plugin”的各种变体之后无法搜索适当地“我放弃了。

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

我决定采用Nik的解决方案,直到我能解决排除问题。