如何在.jar中打包我的类,仍然打包为战争?

时间:2012-01-22 16:34:37

标签: java spring maven

所以我有一个spring mvc web应用程序,我使用maven在IntelliJ 9中构建。

当我跑步时:

mvn clean install

它将所有内容打包在.war文件和爆炸战中。

我的项目布局使用maven简单的网络应用程序拱型。

How can I have my classes compiled into a .jar file also?

目前我的课程在:

/target/myapp/WEB-INF/classes/

我想要的是在.jar中编译我的代码,如:

myapp-1.0.jar

在我的/target/myapp/WEB-INF/lib文件夹中就像我所有的其他罐子一样。

更新

我希望通过maven完成此操作,而不是特定于intellij。

6 个答案:

答案 0 :(得分:2)

您可以轻松创建两个工件 - JAR和WAR。

我不确定将.class文件放在JAR中而不是WEB-INF / classes的优点是什么。两者都被压缩; JAR不会提供额外的压缩。您可能希望在其他应用程序中重用这些.class文件。如果是这种情况,您可以考虑将这些Java类移动到一个单独的模块中,并像添加WAR文件中的任何其他第三方JAR一样添加您创建的JAR文件。其他应用程序可以轻松地从您的存储库中检出JAR文件,然后只需重复使用它。这种安排最好通过将共享Java类移动到版本控制系统中的单独存储库中来完成。

答案 1 :(得分:0)

对我来说,将WAR的内容打包为JAR可能会带来什么好处,这一点都不清楚。如果没有部署WAR的上下文,实现webapp的代码将无法运行。

也就是说,考虑将代码的功能核心提取到一个单独的Maven模块(包含JAR包和一个很好的Java API),这是完全可行的。然后,您的WAR模块可以依赖于它,并且只需要包含将Java API转换为基于Web的API的完全代码。这样做的好处是它还可以极大地提高代码的测试能力(对JAR进行测试肯定会更容易),并允许您考虑使用相同底层代码的其他客户端。你可能会或可能不会感兴趣。您是否需要直接在WAR中使用任何 Java代码?也许,也许不是。毕竟有几种方法可以做到......

答案 2 :(得分:0)

简单的解决方案是war-plugin的配置:

<attachClasses>true</attachClasses>

将完成这项工作并创建一个单独的jar文件。这个jar有一个分类器“类”,可以通过给出配置来改变它。如果你有一些独立的集成测试,它们依赖于war项目中的类别来发布它们并使它们作为依赖项可用,那么这将非常有用。这与责任分离无关。

答案 3 :(得分:-1)

Runninng

mvn jar:jar install

将制作jar,就好像您已将包装类型设置为jar。没有任何改变你的pom。

所以您只需要单独运行该行,将其添加到脚本中或将jar:jar目标添加到现有的maven构建中。

答案 4 :(得分:-2)

包装类型由pom.xml中的“packaging”标签指定(通常放在文件的顶部,以及项目的工件ID,版本等。

尝试找到

<packaging>war</packaging>
pom.xml中的

并将其更改为

<packaging>jar</packaging>

答案 5 :(得分:-2)

ok在你的控制台中编写一个java命令

jar cvf myapp-1.0.jar * .class