SORU
16 Mart 2010, Salı


Yürütülebilir savaş maven olmadan başlar İskelesi dosyası

Bir "" web SAVAŞTA bulunan tüm dosyaları barındıran İskele bir Web sunucusu başlatılır savaş dosyası (java -jar myWarFile.war) idam edildi. çalıştırılabilir yapmak için çalışıyorum

Aradığım şeyi nasıl tarif a page buldum:

Ancak, bir çalıştırılabilir jar (savaş) yapmak gerekiyor sanırım nasıl birlikte bu tavsiyeyi işe yaramıyor.

Karınca bir görev gibi görünen bir bildirim ile dosya: bir SAVAŞ oluşturmak var

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.7.1
Created-By: 1.5.0_18-b02 (Sun Microsystems Inc.)
Main-Class: Start

SAVAŞ dosyanın içeriğini benziyor:

> Start.class
> jsp
>   build.jsp 
> META-INF  
>   MANIFEST.MF
> WEB-INF
>   lib
>     jetty-6.1.22.jar
>     jetty-util.6.1.22.jar

SAVAŞ dosyasını çalıştırmak için denediğimde hata:

Exception in thread "main" java.lang.NoClassDefFoundError: org/mortbay/jetty/Handler
Caused by: java.lang.ClassNotFoundException: org.mortbay.jetty.Handler
        at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
Could not find the main class: Start. Program will exit.

Burada iki hata var gibi gözüküyor: JAR dosyaları bulunamıyor gibi görünüyor, ve Start sınıf bulunamıyor.

İlki düzeltmek için, SAVAŞ üssü JAR dosyaları ve yine dosya çalıştı İskeleye aynı hata koydum. Ben de bildirim Class-Path niteliği WEB-INF/lib/<specific-JAR-files> ekleyerek denedim. Bu da işe yaramadı.

Herkes doğru yanlış/ne yaptığımı ve bu yürütülebilir SAVAŞ dosyası nasıl alabilirim ve çalışan olarak herhangi bir fikir var mı?

CEVAP
9 Temmuz 2010, Cuma


Eğer söz konusu link neye ihtiyacın çoğunu sağlar. Ancak, buna ek olarak yapılması gereken birkaç şey var.

Herhangi bir sınıf başlatmak için İskele ihtiyaçları paketlenmiş zaman savaş dosyasının kök dizininde olması gereken dosyalar. Karınca 13 ** dosyası önce bizim için bunu yapmak için baskı yapabiliriz. Savaşın bildirim dosyası da sunucu çalıştırmak için Main-Class bir öznitelik gerekir.

İşte adım adım:

Oluşturun İskelesi sunucu sınıf:

Bu verdiğiniz linkten uyarlanmıştır.

package com.mycompany.myapp;

import java.io.File;
import java.net.URL;
import java.security.ProtectionDomain;

import org.mortbay.jetty.Server;
import org.mortbay.jetty.webapp.WebAppContext;

public final class EmbeddedJettyServer
{
    public static void main(String[] args) throws Exception
    {
        int port = Integer.parseInt(System.getProperty("port", "8080"));
        Server server = new Server(port);

        ProtectionDomain domain = EmbeddedJettyServer.class.getProtectionDomain();
        URL location = domain.getCodeSource().getLocation();

        WebAppContext webapp = new WebAppContext();
        webapp.setContextPath("/");
        webapp.setDescriptor(location.toExternalForm()   "/WEB-INF/web.xml");
        webapp.setServer(server);
        webapp.setWar(location.toExternalForm());

        // (Optional) Set the directory the war will extract to.
        // If not set, java.io.tmpdir will be used, which can cause problems
        // if the temp directory gets cleaned periodically.
        // Your build scripts should remove this directory between deployments
        webapp.setTempDirectory(new File("/path/to/webapp-directory"));

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

Hepsi burada yapılandırabilirsiniz görmek için Jetty API documentation bakabilirsiniz.

Karınca ile savaş inşa

Bu savaş yapıldığı zaman bir basamak dizini erişilebilir böylece savaşın içine kök gerekli sınıf dosyaları açmak için kullanır.

<target name="war" description="--> Creates self-executing war">
  <property name="staging.dir" location="${basedir}/staging"/>
  <property name="webapp.dir" location="${basedir}/src/webapp"/>

  <mkdir dir="${staging.dir}"/>

  <!-- assumes you have all of your war content (excluding classes and libraries) already structured in a directory called src/webapp -->
  <!-- e.g. -->
  <!-- src/webapp/index.html -->
  <!-- src/webapp/WEB-INF/web.xml -->
  <!-- src/webapp/WEB-INF/classes/my.properties -->
  <!-- etc ... -->
  <copy todir="${staging.dir}">
    <fileset dir="${webapp.dir}" includes="**/*"/>
  </copy>

  <unjar dest="${staging.dir}">
    <!-- you'll have to locate these jars or appropriate versions; note that these include JSP support -->
    <!-- you might find some of them in the downloaded Jetty .tgz -->
    <fileset dir="path/to/jetty/jars">
      <include name="ant-1.6.5.jar"/>
      <include name="core-3.1.1.jar"/>
      <include name="jetty-6.1.24.jar"/>
      <include name="jsp-2.1-glassfish-2.1.v20091210.jar"/><!-- your JSP implementation may vary -->
      <include name="jsp-api-2.1-glassfish-2.1.v20091210.jar"/><!-- your JSP implementation may vary -->
      <include name="servlet-api-2.5-20081211.jar"/><!-- your Servlet API implementation may vary -->
    </fileset>
    <patternset><!-- to exclude some of the stuff we don't really need -->
      <exclude name="META-INF/**/*"/>
      <exclude name="images/**/*"/>
      <exclude name=".options"/>
      <exclude name="about.html"/>
      <exclude name="jdtCompilerAdapter.jar"/>
      <exclude name="plugin*"/>
    </patternset>
  </unjar>

  <!-- copy in the class file built from the above EmbeddedJettyServer.java -->
  <copy todir="${staging.dir}">
    <fileset dir="path/to/classes/dir" includes="com/mycompany/myapp/EmbeddedJettyServer.class"/>
  </copy>

  <war destfile="myapp.war" webxml="${webapp.dir}/WEB-INF/web.xml">
    <fileset dir="${staging.dir}" includes="**/*"/>
    <classes dir="path/to/classes/dir"/><!-- your application classes -->
    <lib dir="path/to/lib/dir"/><!-- application dependency jars -->
    <manifest>
      <!-- add the Main-Class attribute that will execute our server class -->
      <attribute name="Main-Class" value="com.mycompany.myapp.EmbeddedJettyServer"/>
    </manifest>
  </war>

  <delete dir="${staging.dir}"/>
</target>

Savaş yürütmek:

Eğer her şey düzgün yukarıda kurup kurmadığını, mümkün olmalıdır:

java -jar myapp.war

// or if you want to configure the port (since we are using the System property in the code)

java -Dport=8443 -jar myapp.war

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Defence Videos

    Defence Vide

    13 Mayıs 2013
  • segtlim

    segtlim

    21 EKİM 2008
  • Willie D.

    Willie D.

    16 Aralık 2006