2013-02-25 97 views
0

我有一个多模块Maven项目,以及我的网络项目的pom.xml文件看起来像:大厦Maven项目,不包括web项目的jar文件

<parent> 
    <artifactId>myapp</artifactId> 
    <groupId>com.myapp</groupId> 
    <version>1.0</version> 
</parent> 
<modelVersion>4.0.0</modelVersion> 
<artifactId>myapp-web</artifactId> 
<packaging>war</packaging> 
<name>myapp-web Maven Webapp</name> 
<url>http://maven.apache.org</url> 

这是一个春天MVC应用程序,我有一个嵌入式码头实例也:

Server server = new Server(8080); 

    WebAppContext webAppContext = new WebAppContext(); 
    webAppContext.setContextPath("/"); 
    webAppContext.setWar("file:/path/to/war/myapp-web.war"); 
    webAppContext.setParentLoaderPriority(true); 
    server.setHandler(webAppContext); 

    server.start(); 
    server.join(); 

我建立使用maven Web项目:

mvn clean package 

那么,什么是confusi当我解压Maven在构建期间生成的myapp.war文件时,我查看了lib文件夹,并且没有看到web项目的.jar文件?

另外,如何使用.war文件运行嵌入式jetty?

+0

你指的是在你的'myapp-web'项目中定义的类吗?那些绑定到'WEB-INF/classes'中,而不是'WEB-INF/lib'中的JAR。如果您打算使用嵌入式服务器运行项目,那么构建WAR并不是特别有用,为什么不构建[superjar](http://code.google.com/p/onejar-maven-plugin/)? – Perception 2013-02-25 04:33:39

+0

@Perception为什么Jetty有.setWar()方法呢?我很抱歉抱歉。如果我构建一个superjar或uberjar(使用maven遮罩?),那么我将如何使用setWar()? – Blankman 2013-02-28 04:36:21

+0

无视我以前的评论,这是一个泛化。更多关于主题,你有没有阅读[this](http://eclipsesource.com/blogs/2009/10/02/executable-wars-with-jetty/) – Perception 2013-02-28 04:46:42

回答

0

最终创建战争的Web项目的内容应直接进入战争中的WEB-INF/classes,而不是jar文件。

只要你已经设置了嵌入式码头正确的,你应该能够运行使用

java -jar myapp-web.war 

的配置将包括创建一个main方法的战争中,加入适当的码头的依赖,并指定清单生成时的主要类。

jetty-console-maven-plugin可能是设置所有这些的简单替代方案。看看这个指南:http://www.dzone.com/links/r/make_your_war_file_executable_with_the_jetty_cons.html

+0

如何创建清单? – Blankman 2013-02-28 02:47:04