Eclipse + m2eclipse插件+ EAR模块依赖项

时间:2010-05-18 13:52:37

标签: eclipse module plugins maven dependencies

我正在尝试使用m2eclipse插件从头开始创建一个eclipse项目,以帮助解决依赖关系。

该项目包括以下模块:

测试耳 测试EJB 测试战

ear引用了其他两个项目,并且pom文件已准备好并在每个项目中工作。

我仍有一种情况:

我希望能够从eclipse导出耳朵并拥有一个有效的项目,而不仅仅是maven构建我的项目,因此我可以将其热部署在服务器中。

但我有一个问题...... ejb使用外部jar(jbpm),在pom中正确指定了依赖关系,它出现在“Maven Dependencies”用户lib定义中,并且我没有编译错误。< / p>

但是要成功导出EAR,我必须将jar(jbpm)添加到ejb清单文件中。转到项目属性“Java EE Module Dependencies”我只有条目“Maven Dependencies”lib,选择它不会向清单文件添加任何信息。

之后,导出EAR将在EAR根目录中显示依赖jar文件,但打开包含的EJB会显示清单根本没有类路径条目。

在依赖jar中的类上,部署EAR然后失败并显示有关EJB中的ClassNotFoundException的信息。

为了绕过这个,我可以将jar包含在EAR模块中(project-&gt; properties-&gt; Java EE Module Dependencies),然后我可以将它添加到EJB中,并相应地更新清单文件。

但是该项目将有大量的罐子,我不想将它们全部包含在EAR中,然后在每个项目中选择它们。

我知道这些条目位于.settings / org.eclipse.wst.common.component文件中,但不应该在EAR项目中自动更新它吗?至少在Java EE模块依赖项上,我可以检查每个子项目上的jar(ejb,war,...)

由于

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您希望在生成的EAR文件中打包EJB使用的所有第三方库。如果您的EAR项目具有打包类型ear,并且使用类型ejb正确指定了EJB模块的依赖项,那么第三方库应该自动包含在生成的EAR文件中。您还可以在EAR中指定自定义lib目录。

示例:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>yourGroup</groupId>
    <artifactId>test-ear</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <!-- We want the resulting artifact to be an .ear file -->
    <packaging>ear</packaging>

    <dependencies>
        <!-- Internal dependencies -->
        <dependency>
            <groupId>yourGrup</groupId>
            <artifactId>test-ejb</artifactId>
            <version>1.0.0-SNAPSHOT</version>
            <!-- We have an ejb dependency here - take care of it! -->
            <type>ejb</type>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-ear-plugin</artifactId>
                <configuration>
                    <version>5</version>
                    <!-- put all 3rd party libs into the lib directory -->
                    <defaultLibBundleDir>lib</defaultLibBundleDir>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

所以这不应该与m2e imo有任何关系。您可能必须在Eclipse中更新项目配置。