所以我有一个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。
答案 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