包括一个模块到另一个模块

时间:2018-01-25 21:34:03

标签: maven java-ee jboss netbeans-8

我有这种架构的maven projet:

++parent-project
    +module-a
    +module-b

module-b是一个Web应用程序。它将在Jboss AS 7.1.1上运行。我正在使用netbeans IDE。

现在module-b取决于module-a。这是module-b的porm部分:

<dependency>
        <groupId>groupid</groupId>
        <artifactId>module-a</artifactId>
        <scope>compile</scope>
</dependency>

当我构建module-b的war文件时,lib文件夹中没有module-a(在war文件中。我用archive explorer打开它)。因此JBoss返回ClassNotFoundException

我尝试了不同的范围(编译,提供,运行时,测试)。但没什么。

请问我该如何解决这个问题。

1 个答案:

答案 0 :(得分:0)

首先,我认为你应该试着看看它是如何运作的,纯粹的&#34; maven,完全没有IDE(NetBeans)。所以我的答案将仅基于maven知识:

有几个事实:

  1. 模块b必须在pom中有以下内容:<packaging>war</packaging>这将指示maven你真的想要从这个模块中获得一场战争。

  2. 当在某个pom中指定打包WAR时,maven将获取此pom中定义的所有依赖项,并将它们放入war的WEB-INF / lib文件夹中。自动。当然,你可以自定义输出,但它更高级的东西(如果需要,请参阅Maven WAR插件)

  3. 所有依赖项必须至少使用组ID,工件ID和版本进行定义。因此,请确保您对模块a具有版本依赖性。在这种情况下,没有必要摆弄范围。默认范围(如果您根本没有指定范围)是&#39;编译&#39;这很好。

  4. 转到模块b的目录,并从目录类型中mvn dependency:tree。完成后,请仔细观察输出,特别是确保模块a在树中列出(具有正确的版本)。

  5. 有时为了确保本地m2存储库中没有过时的工件,您可能希望从那里删除项目的所有jar,然后再次执行mvn package命令。必须在module b/target中创建战争 - 这是你应该检查的战争。

    请注意,所有这些步骤都是在没有与NetBeans进行任何交互的情况下完成的。