我有这种架构的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
。
我尝试了不同的范围(编译,提供,运行时,测试)。但没什么。
请问我该如何解决这个问题。
答案 0 :(得分:0)
首先,我认为你应该试着看看它是如何运作的,纯粹的&#34; maven,完全没有IDE(NetBeans)。所以我的答案将仅基于maven知识:
有几个事实:
模块b必须在pom中有以下内容:<packaging>war</packaging>
这将指示maven你真的想要从这个模块中获得一场战争。
当在某个pom中指定打包WAR时,maven将获取此pom中定义的所有依赖项,并将它们放入war的WEB-INF / lib文件夹中。自动。当然,你可以自定义输出,但它更高级的东西(如果需要,请参阅Maven WAR插件)
所有依赖项必须至少使用组ID,工件ID和版本进行定义。因此,请确保您对模块a具有版本依赖性。在这种情况下,没有必要摆弄范围。默认范围(如果您根本没有指定范围)是&#39;编译&#39;这很好。
转到模块b的目录,并从目录类型中mvn dependency:tree
。完成后,请仔细观察输出,特别是确保模块a在树中列出(具有正确的版本)。
有时为了确保本地m2存储库中没有过时的工件,您可能希望从那里删除项目的所有jar,然后再次执行mvn package
命令。必须在module b/target
中创建战争 - 这是你应该检查的战争。
请注意,所有这些步骤都是在没有与NetBeans进行任何交互的情况下完成的。