2010-03-24 50 views
6

假设我有一个在maven中定义的war和jar项目。Jar依赖于战争项目中的类

罐子项目是依赖于战争项目

我设法在战争插件添加

在战争项目<attachClasses>为true,以获得封装模式这个工作。

,使依赖于

 <groupId>com</groupId> 
     <artifactId>oneway-delegator</artifactId> 
     <version>1.0</version> 
     <classifier>classses</classifier> 
在罐子POM

但是,当运行只编译类jar没有创建,一切都失败。

任何想法的人?

+0

我不明白你的问题。你的战争项目是依赖于你的jar项目还是其他方式?如果你的战争项目依赖于一个jar项目,它应该是非常直接的,除了分类器元素,依赖声明看起来很好。它不应该被需要。 – Buhb

+0

嗯,我不会问这个,如果战争取决于罐子,它的罐子取决于战争(问题的第二行) – Roman

回答

12

但是,当运行只编译类jar没有创建,一切都失败。

事实上,你可以配置Maven的战争插件来打包/部署类和资源包含在你的Web应用中使用具有以下配置的分类的“附加” JAR神器:

<project> 
    ... 
    <artifactId>mywebapp</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    ... 
    <build> 
    <plugins> 
     <plugin> 
     <artifactId>maven-war-plugin</artifactId> 
     <version>X.Y</version> 
     <configuration> 
      <attachClasses>true</attachClasses> 
     </configuration> 
     </plugin> 
    </plugins> 
    </build> 
    ... 
</project> 

但是此工件是在package阶段创建的,因此如果仅运行compile,则不要指望它在那里。

请注意,这个配置选项已经引入了一个非常特殊的用例 - 骨干战争用例。如果您需要在另一个项目中重新使用此JAR,建议的方法通常是将这些类移动到一个单独的模块中,该模块构建JAR,然后从您的Web应用程序以及其他任何项目中声明对该JAR的依赖关系需要它。

7

不要这样做。

这不是一个可接受的依赖项,使得依赖于war(Java EE特定应用程序包)的jar(纯java代码)成为可能。如果你的战争中有代码依赖于你的代码,那么这个代码应该在它自己的jar中,然后web应用程序和jar项目都会对它有共同的依赖。

+0

是的,这听起来像个好主意......谢谢 – Roman

+1

好的建议。 “当有疑问时,创建另一个模块”,当涉及到maven时。 – whaley

+2

它是一个常见的情况,当你有一场战争,第二个maven模块包含第一个webapp的一些集成测试。在这种情况下,能够使用webapp类和依赖关系将非常有用。 –

相关问题