2013-02-28 26 views
6

私は埋め込みJettyサーバにWebアプリケーションを配備しようとしています。私のアプリケーションは以下のコードでWindows環境でローカルに正常に動作しますが、Linuxサーバー上のJARファイルとして展開すると、web.xmlファイルが取得されないようです。 JARを構築する前に、DescriptorまたはResourceBaseのフィールドを変更する必要がありますか?次のように突堤を埋め込ま埋め込みJettyサーバクラスパスの問題

static void startJetty() { 
     try { 
      Server server = new Server(9090); 
      WebAppContext context = new WebAppContext(); 
      context.setDescriptor("/WEB-INF/web.xml");      
      context.setResourceBase("../DemoWithMultiChannels/src/"); 
      context.setContextPath("/");    
      context.setParentLoaderPriority(true); 
      server.setHandler(context); 

      System.out.println("Starting Server!");    
      server.start(); 

答えて

2

デプロイ:

メインクラス

public static void main(String[] args) throws Exception { 
    Server server = new Server(8085);   

    WebAppContext webContext = new WebAppContext(); 
    webContext.setDescriptor("WEB-INF/web.xml"); 
    webContext.setResourceBase("src/sim/ai/server/start");  
    webContext.setServer(server); 
    webContext.setParentLoaderPriority(true); 
    server.setHandler(webContext); 

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

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>sim.ai.server.start</display-name> 
    <servlet> 
     <servlet-name>Jersey REST Service</servlet-name> 
     <servlet-class> 
     com.sun.jersey.spi.container.servlet.ServletContainer 
     </servlet-class> 
     <init-param> 
      <param-name>com.sun.jersey.config.property.packages</param-name> 
      <param-value>sim.ai.server.start</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>Jersey REST Service</servlet-name> 
     <url-pattern>/rest/*</url-pattern> 
    </servlet-mapping> 
</web-app> 

はjarファイルと同じフォルダにWEB_INFフォルダを作成します。など、WEB_INFweb.xmlをコピーします。

sim/light.jar 
sim/WEB-INF/web.xml 
6

私は同じ問題を抱えていたし、ちょうどソリューションが見つかりました:それは罰金働いていた
私は実行「のjava -jar ...」端末からの、私は生まれたときそれは別のプロジェクトから取り除かれましたが、web.xmlは取得されませんでした。あなたは、リソースを使用しない場合は

context.setDescriptor(Launch.class.getResource("/WEB-INF/web.xml").toString()); 

は、あなたは自分のSRC内の通常のファイルをお読みください。

理由は、それは私がやっている終わるものを、元のプロジェクトに関連した、web.xmlのパスが間違っていたましたフォルダではなく、私はクラスパス内のリソースを見つけることができ、特定の子孫でWebAppContextとWebXmlConfigurationを交換したの.jar

4

のために良い作品https://github.com/jreznot/diy-remote/blob/master/server/src/org/strangeway/diyremote/server/sys/ClasspathWebXmlConfiguration.java

ここでそれを行う方法です。あなたのpom.xmlで

まず、Webアプリケーションのフォルダがどこにあるかを宣言:ここ

<build> 
    <resources> 
     <resource> 
      <directory>src/main</directory> 
     </resource> 
    </resources> 

は私のsrc /メインディレクトリのツリーです:

├── java 
│   └── com 
│    └── myco 
│     └── myapp 
│      └── worker 
│       ├── App.java 
|     ... 
├── resources 
│   ├── log4j.properties 
│   └── version.properties 
└── webapp 
    ├── index.html 
    ├── index.jsp 
    ├── lib 
    │   ├── inc_meta.jsp 
    │   └── inc_navigation.jsp 
    ├── query.html 
    ├── scripts 
    │   ├── angular.min.js 
    │   └── bootstrap.min.css 
    ├── showresults.jsp 
    ├── status.jsp 
    └── WEB-INF 
     └── web.xml 

あなたの中のMavenシェードプラグインを追加します。 pom.xmlファイル:

0:

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-shade-plugin</artifactId> 
      <version>2.3</version> 
      <executions> 
       <execution> 
        <phase>package</phase> 
        <goals> 
         <goal>shade</goal> 
        </goals> 
       </execution> 
      </executions> 
      <configuration> 
       <finalName>uber-${artifactId}-${version}/finalName>        
      </configuration>           
     </plugin> 

次に、このように桟橋を開始

public static void startJetty() throws Exception { 
    logger.info("starting Jetty..."); 

    Server server = new Server(8080); 
    WebAppContext webAppContext = new WebAppContext(); 
    webAppContext.setContextPath("/"); 

    /* Important: Use getResource */ 
    String webxmlLocation = App.class.getResource("/webapp/WEB-INF/web.xml").toString(); 
    webAppContext.setDescriptor(webxmlLocation); 

    /* Important: Use getResource */ 
    String resLocation = App.class.getResource("/webapp").toString(); 
    webAppContext.setResourceBase(resLocation); 

    webAppContext.setParentLoaderPriority(true); 

    server.setHandler(webAppContext); 

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

重要な部分は、<YourApp>.class.getResource(<your location>)を使用して、jarファイル内のファイルへのパスを指定することです。間違った方法は、ファイルシステム上のパスを与えるwebContext.setDescriptor("WEB-INF/web.xml");のようにすることです。

はその後ユーバー-jarファイルが生成され、リソースとして宣言されたwebappディレクトリが含まれているパッケージ

$mvn clean package 

を作成します。

のどこか本番サーバー上でjarファイルを移動して、このようにそれを実行し

$ java -jar myjettyembededwithwebxmlandhtmljspfile.jar 
関連する問題