我正在使用Spring,Hibernate,GWT和Maven 3開發一個多模塊項目,並嘗試將一個war文件分發部署到servlet容器(最好是Tomcat 7或Jetty 8)。我使用maven-assembly-plugin 2.2.1創建war文件(我正在運行maven 3)。在Maven構建過程中,所有工作都非常完美,並創建了分發存檔。但是當我嘗試部署戰爭文件時,雖然一切都已到位(Web-inf/lib等),但我得到了ClassNotFound-Exceptions(例如Spring ContextLoaderListener等)。所以,webapp不會啓動。然後我將war-file解包到servlet容器的webapp目錄中,一切工作正常......?Maven程序集插件產生不可部署的war文件
經過進一步調查,我發現了以下內容: 如果我使用maven-war-plugin(!)創建的任意war文件A',將其內容替換爲使用maven創建的war文件中的解壓內容 - 裝配 - 插件(讓我把它叫做 A.),我可以看到兩件事情:
- 生成的WAR文件」比我原來的文件更小的幾個字節,雖然它們的內容是相同的
- A'的調配突然像魅力一樣工作
這很奇怪,我完全不知道發生了什麼。也許有一個問題,maven-war-plugin和maven-assembly-plugin處理war文件的打包方式不同?!我的意思是,一場戰爭只是一個帶有一些預定義結構的重命名的zip文件...也許它與maven完全沒有關係,但與文件編碼或其他東西?對此有何想法?我明白任何提示,可以幫助我在調查這個...
這是我的裝配描述
<assembly
xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
<id>dist</id>
<formats>
<format>war</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
<dependencySet>
<unpack>true</unpack>
<includes>
<include>mypackage.client:parametermgmt:*</include>
<include>mypackage.static:client:*</include>
</includes>
<useProjectArtifact>false</useProjectArtifact>
<outputDirectory>/</outputDirectory>
</dependencySet>
<dependencySet>
<unpack>false</unpack>
<includes>
<include>mypackage.server.database:domain:*</include>
<include>mypackage.server.businessobjects:BOdomain:*</include>
<include>mypackage.server.security:security:*</include>
<include>mypackage.server.services:paramgmt:*</include>
</includes>
<useProjectArtifact>false</useProjectArtifact>
<outputDirectory>Web-inf/lib</outputDirectory>
</dependencySet>
<dependencySet>
<unpack>true</unpack>
<includes>
<include>mypackage.static:server:*</include>
</includes>
<useProjectArtifact>false</useProjectArtifact>
<outputDirectory>/</outputDirectory>
</dependencySet>
<dependencySet>
<unpack>false</unpack>
<includes>
<include>*</include>
</includes>
<excludes>
<exclude>mypackage.*</exclude>
</excludes>
<scope>runtime</scope>
<useProjectArtifact>false</useProjectArtifact>
<outputDirectory>Web-inf/lib</outputDirectory>
</dependencySet>
</dependencySets>
如果不打算創建戰爭,那麼它爲什麼會提供支持的格式? – 2011-06-29 04:35:45
Thx爲您的答覆。程序集插件可用於[生成war文件,因爲它可用於生成zip,dir,tar。gz和其他格式。](http://www.sonatype.com/books/mvnref-book/reference/assemblies-sect-descriptor.html)我傾向於使用它除了戰爭插件,因爲我想要一個細粒度的控制裝配過程和最終的戰爭內容。另一種選擇是使用war war oyerlays,但不幸的是這對我不起作用,因爲Web-inf/classes之外的所有依賴戰爭內容都被省略,即在解壓依賴戰爭時迷路了。也許我錯過了一些 – holger 2011-04-20 16:21:41
如果你想爲不同的應用程序服務器產生不同的戰爭,你怎麼能用maven-war-plugin來實現這一點? – maks 2012-10-04 15:52:39