我正在嘗試將應用程序部署到Apache Felix。這是一個gwt應用程序,但我一直在簡化問題,直到只是一個世界性的html文件,所以我的問題是在war文件中部署任何類型的web應用程序。我也嘗試在Apache Karaf中部署生成的戰爭,並且他們的工作沒有任何問題(一旦你install feature war)。在Apache Felix中部署war文件?
所以,現在我有這樣的:
[email protected]:~/devel/webapp $ tree
.
├── pom.xml
├── src
└── main
├── resources
└── webapp
├── foobar.html
└── WEB-INF
└── web.xml
pom.xml中是非常簡單的,最有趣的部分是與Felix插件有關,但沒有任何編譯代碼此戰也沒關係。 ..
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany</groupId>
<artifactId>webapp</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>webapp Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<finalName>webapp</finalName>
<plugins>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>2.3.7</version>
<extensions>true</extensions>
<executions>
<execution>
<id>bundle-manifest</id>
<phase>process-classes</phase>
<goals>
<goal>manifest</goal>
</goals>
</execution>
</executions>
<configuration>
<supportedProjectTypes>
<supportedProjectType>jar</supportedProjectType>
<supportedProjectType>bundle</supportedProjectType>
<supportedProjectType>war</supportedProjectType>
</supportedProjectTypes>
<instructions>
<Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
<Bundle-Version>${project.version}</Bundle-Version>
<Embed-Dependency>*;scope=compile|runtime</Embed-Dependency>
<Embed-Directory>WEB-INF/lib</Embed-Directory>
<Embed-Transitive>true</Embed-Transitive>
<Import-Package>*;resolution:=optional</Import-Package>
<Web-ContextPath>/sample</Web-ContextPath>
<Webapp-Context>/sample</Webapp-Context>
<_wab>src/main/webapp</_wab>
</instructions>
</configuration>
</plugin>
<plugin>
<groupId>org.ops4j</groupId>
<artifactId>maven-pax-plugin</artifactId>
<configuration>
<provision>
<param>--platform=felix</param>
<param>--profiles=compendium,web,war,log</param>
<param>--log=debug</param>
</provision>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.1.1</version>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>exploded</goal>
</goals>
</execution>
</executions>
<configuration>
<webappDirectory>${webappDirectory}</webappDirectory>
<archive>
<!-- add the generated manifest to the war -->
<manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
pax插件也存在,因爲我試圖運行該應用程序,但我得到了相同的結果。在web.xml是空單:
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<welcome-file-list>
<welcome-file>foobar.html</welcome-file>
</welcome-file-list>
</web-app>
一旦執行MVN包生成war文件,如果我在Apache的費利克斯部署我沒有得到任何錯誤,成束的狀態是積極的,但我只得到試圖訪問/示例路徑的404錯誤。我試着把樣本和/樣本作爲上下文路徑值。運行相同的行爲mvn pax:運行。如果我在Apache karaf中部署這場戰爭,它會起作用,所以我會認爲我正在用felix做一些非常錯誤的事情。
我現在的束名單是:
g! lb
START LEVEL 1
ID|State |Level|Name
0|Active | 0|System Bundle (4.0.2)
1|Active | 1|JXSE (2.7.0)
2|Active | 1|Apache Felix Bundle Repository (1.6.6)
3|Active | 1|Apache Felix Configuration Admin Service (1.2.8)
4|Active | 1|Apache Felix EventAdmin (1.2.14)
5|Active | 1|Apache Felix File Install (3.2.0)
7|Resolved | 1|Apache Felix Security Provider (2.0.1)
8|Active | 1|Apache Felix Gogo Command (0.12.0)
9|Active | 1|Apache Felix Gogo Runtime (0.10.0)
10|Active | 1|Apache Felix Gogo Shell (0.10.0)
11|Active | 1|Apache Felix Http Api (2.2.0)
12|Active | 1|Apache Felix Http Base (2.2.0)
13|Active | 1|Apache Felix Http Bridge (2.2.0)
14|Active | 1|Apache Felix Http Bundle (2.2.0)
15|Active | 1|Apache Felix Http Jetty (2.2.0)
16|Active | 1|Apache Felix Log Service (1.0.1)
17|Active | 1|Apache Felix Shell Service (1.4.2)
18|Active | 1|OPS4J Pax Logging - API (1.6.3)
19|Active | 1|OPS4J Pax Logging - Service (1.6.3)
20|Active | 1|OPS4J Pax Url - mvn: (1.2.8)
21|Active | 1|OPS4J Pax Url - war (1.2.8)
22|Active | 1|OPS4J Pax Url - wrap: (1.2.8)
23|Active | 1|OPS4J Pax Web - API (1.0.9)
24|Active | 1|OPS4J Pax Web - FileInstall Deployer (1.0.9)
25|Active | 1|OPS4J Pax Web - Extender - WAR (1.0.9)
26|Active | 1|OPS4J Pax Web - Extender - Whiteboard (1.0.9)
27|Active | 1|OPS4J Pax Web - Jetty Bundle (1.0.9)
28|Active | 1|OPS4J Pax Web - Jsp Support (1.0.9)
29|Active | 1|OPS4J Pax Web - Runtime (1.0.9)
30|Active | 1|OPS4J Pax Web - Service SPI (1.0.9)
我在控制檯中接下來要檢查的是你的包(它似乎沒有包含在上面的列表中,但我認爲這只是簡單地編輯出來)正在使用HTTP服務。如果是這樣,你的端口或URL有錯誤。如果不是,pax-web由於某種原因沒有注意到您的WAB。 – 2012-04-18 18:23:59
我也建議在春分容器(--platform = equinox)中嘗試確認OSGi容器不是問題。我懷疑你會看到與Equinox相同的行爲,這表明它是一個缺少的pax-web軟件包或pax-runner問題,或者pax-web bug或端口蹲點 - 但不是Felix。 – 2012-04-18 18:44:54