2012-04-18 189 views
5

我正在嘗試將應用程序部署到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) 
+0

我在控制檯中接下來要檢查的是你的包(它似乎沒有包含在上面的列表中,但我認爲這只是簡單地編輯出來)正在使用HTTP服務。如果是這樣,你的端口或URL有錯誤。如果不是,pax-web由於某種原因沒有注意到您的WAB。 – 2012-04-18 18:23:59

+1

我也建議在春分容器(--platform = equinox)中嘗試確認OSGi容器不是問題。我懷疑你會看到與Equinox相同的行爲,這表明它是一個缺少的pax-web軟件包或pax-runner問題,或者pax-web bug或端口蹲點 - 但不是Felix。 – 2012-04-18 18:44:54

回答

3

是在做工作的束被OPS4J- *的,但跑碼頭的那些人的org.apache.felix.http *。一旦我刪除org.apache.felix.http。*捆綁包,一切都開始工作。

+2

你應該接受你自己的答案=) – earcam 2012-04-19 10:54:00