Savaş dosyaları nasıl oluşturulur


96

Tomcat üzerinde çalıştırmak için savaş dosyaları oluşturmanın (tutulmayı kullanarak) en iyi uygulamaları nelerdir? öğreticiler, bağlantılar, örnekler çok takdir edilmektedir.

Yanıtlar:


98

Sen kullanabilirsiniz Ant kurmak, derlemek WAR ve çözümünüzü dağıtmak.

<target name="default" depends="setup,compile,buildwar,deploy"></target>

Daha sonra bu Ant hedefini çalıştırmak için Eclipse'de tek bir tıklama uygulayabilirsiniz. Aşağıda, adımların her birine ilişkin örnekler verilmiştir:

Ön koşullar

Kodunuzun şu şekilde organize edildiğini varsayacağız:

  • ${basedir}/src: Java dosyaları, özellikleri, XML yapılandırma dosyaları
  • ${basedir}/web: JSP dosyalarınız
  • ${basedir}/web/lib: Çalışma zamanında gerekli tüm JAR'lar
  • ${basedir}/web/META-INF: Bildiriminiz
  • ${basedir}/web/WEB-INF: Web.xml dosyalarınız

Kurmak

setupDağıtım dizinini oluşturan ve doğrudan WARred edilmesi gereken tüm yapıları kopyalayan bir görev tanımlayın :

<target name="setup">
    <mkdir dir="dist" />
    <echo>Copying web into dist</echo>
    <copydir dest="dist/web" src="web" />
    <copydir dest="dist/web/WEB-INF/lib" src="${basedir}/../web/WEB-INF/lib" />
</target>

Derleme

Java dosyalarınızı sınıflar halinde oluşturun ve altında bulunan srcancak çalışma zamanında bulunması gereken Java dışı yapıların (ör. Özellikler, XML dosyaları vb.) Üzerine kopyalayın :

<target name="compile">
    <delete dir="${dist.dir}/web/WEB-INF/classes" />
    <mkdir dir="${dist.dir}/web/WEB-INF/classes" />
    <javac destdir="${dist.dir}/web/WEB-INF/classes" srcdir="src">
        <classpath>
            <fileset dir="${basedir}/../web/WEB-INF/lib">
                  <include name="*" />
            </fileset>
        </classpath>
    </javac>
    <copy todir="${dist.dir}/web/WEB-INF/classes">
        <fileset dir="src">
            <include name="**/*.properties" />
            <include name="**/*.xml" />
        </fileset>
    </copy>
</target>

SAVAŞ oluşturun

SAVAŞ'ın kendisini yaratın:

<target name="buildwar">
    <war basedir="${basedir}/dist/web" destfile="My.war"
     webxml="${basedir}/dist/web/WEB-INF/web.xml">
        <exclude name="WEB-INF/**" />
        <webinf dir="${basedir}/dist/web/WEB-INF/">
            <include name="**/*.jar" />
        </webinf>
    </war>
</target>

Dağıtmak

Son olarak, WAR'ı doğrudan Tomcat konuşlandırma konumunuza dağıtmak için bir görev oluşturabilirsiniz:

<target name="deploy">
    <copy file="My.war" todir="${tomcat.deploydir}" />
</target>

Tıkla ve git!

Tüm bunlar ayarlandıktan sonra, defaulthedefi Eclipse'den başlatmak, çözümünüzü derleyecek, SAVAŞACAK ve dağıtacaktır.

Bu yaklaşımın avantajı, Eclipse dışında ve Eclipse içinde de çalışacak olması ve dağıtım stratejinizi (örneğin kaynak kontrolü aracılığıyla) projenizde çalışan diğer geliştiricilerle kolayca paylaşmak için kullanılabilmesidir.


peki onu tomcat'e dağıtmak istiyorum. Targer'ı nasıl değiştirmeliyim?

Lütfen detaylandırır mısınız? $ {Tomcat.deploydir}, Tomcat bağlam dağıtım dizininizi işaret ettiği sürece, bunu yapmalıdır. Hayır?
David Citron

1
Savaş hedefinde gereksiz '<exclude name = "WEB-INF / **" />' var. Bu klasöre * .class dosyaları oluşturdunuz ve bunları dışlamak işe yaramıyor. Bu dışlama çizgisini çalıştığı savaş hedefinden kaldırın.
ankitjaininfo

2
Bu cevap gereksiz yere karmaşıktır.
Alex R.

38

Her zaman Eclipse'den Dışa Aktar'ı seçtim. Savaş dosyasını oluşturur ve gerekli tüm dosyaları içerir. Projeyi yapmanız gereken tek şey bir web projesi olarak oluşturmanızı sağlamak. Eclipse, bunu yapmayı çok kolaylaştırır.


Teşekkürler! ve değeri ne olursa olsun, "Dosya" menüsünden "Dışa Aktar" ı seçersiniz, ardından "Bir Dışa Aktarma Hedefi Seçin" bölümünde "WAR" yazın ve savaş dosyası seçeneği açılır.
Brad Parks

4
hızlı ve kirli web uygulamaları için benim seçimim. SAVAŞ testini çıkarmak için bir karınca senaryosu yazmak çok fazla iş.
Renan

Bir karınca dosyası oluşturmak yerine başka bir çözüm, WAR dosyasına sarmak istediğiniz klasöre gitmek ve bu komutu "jar -cvf name.war *" yürütmektir.
MC

Bunun için teşekkürler, Maven veya Ant'ı yapılandırmaktan çok daha basit (gerekli olmadığında).
simon

23

Tüm java projelerimiz için Maven (Ant'ın ağabeyi) kullanıyoruz ve çok şık bir WAR eklentisine sahip. Öğreticiler ve kullanım burada bulunabilir.

Ant'tan çok daha kolay, Eclipse ile tamamen uyumlu ( Eclipse projeleri oluşturmak için maven eclipse: eclipse kullanın) ve yapılandırması kolaydır.

Maven ana sayfası

Maven WAR eklentisi

Örnek Yapılandırma:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.1-alpha-2</version>
    <configuration>
        <outputDirectory>${project.build.directory}/tmp/</outputDirectory>
        <workDirectory>${project.build.directory}/tmp/war/work</workDirectory>
        <webappDirectory>${project.build.webappDirectory}</webappDirectory>
        <cacheFile>${project.build.directory}/tmp/war/work/webapp-cache.xml</cacheFile>
        <nonFilteredFileExtensions>
            <nonFilteredFileExtension>pdf</nonFilteredFileExtension>
            <nonFilteredFileExtension>png</nonFilteredFileExtension>
            <nonFilteredFileExtension>gif</nonFilteredFileExtension>
            <nonFilteredFileExtension>jsp</nonFilteredFileExtension>
        </nonFilteredFileExtensions>
        <webResources>
            <resource>
                <directory>src/main/webapp/</directory>
                <targetPath>WEB-INF</targetPath>
                <filtering>true</filtering>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
        </webResources>
        <warName>Application</warName>
    </configuration>
</plugin>

1
Sana puanını geri verdim (yine de onu kaldıran ben değildim). Maven, "konfigürasyon yerine kongre" nin kendi özel versiyonuna uyuyorsanız (istiyorsanız?) Kesinlikle makul bir seçimdir.
David Citron

1
Hoşuma gitti =) CM olarak oldukça büyük bir projede çalışıyorum ve proje konfigürasyonunun homurtulu çalışmasını benim için yaptırmaktan memnunum. Ayrıca eklenti desteği harika. Surefire ve CheckStyle ile bir WAR eklentisi ile beş dakika içinde çok modüllü bir projeye sahip olmak bir zevktir. Ant, daha açık ve tartışmalı olarak daha güçlü olmasına rağmen, buna kıyasla bir güçlüktür. Her neyse, Maven, Ant'ın bir alt kümesidir, bu yüzden orada herhangi bir komut dosyası yazmanız gerekirse, hoş geldiniz.
mikek

4
Maven'in XML yapısının ANT'lere dayalı olmasının yanı sıra ANT, Maven'ın bir alt kümesi olarak dahil ediliyor.
mikek

14

Bir savaş dosyası, basitçe bir savaş uzantılı bir jar dosyasıdır, ancak onu çalıştıran şey, içeriğin gerçekte nasıl yapılandırıldığıdır.

J2EE / Java EE öğreticisi bir başlangıç ​​olabilir:

http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/WebComponents3.html

Ve Servlet spesifikasyonu kanlı ayrıntıları içerir:

http://java.sun.com/products/servlet/download.html

Eclipse'de yeni bir web projesi oluşturursanız (Java EE sürümünden bahsediyorum), yapı sizin için oluşturulur ve ayrıca ona, Uygulama Sunucunuzun nerede kurulduğunu söyleyebilir ve sizin için uygulamayı dağıtıp başlatır.

"Export-> WAR dosyası" seçeneğini kullanmak, savaş dosyasını kaydetmenize izin verir.


12

Ne yapacağınızdan emin değilseniz ve sıfırdan başlıyorsanız, Maven başlamanıza yardımcı olabilir.

Aşağıdaki adımları takip ederek, tutulmada mükemmel bir şekilde yeni bir savaş projesi kurgusu elde edebilirsiniz.

  1. Maven'i indirin ve yükleyin
  2. Komut satırına gidin ve şunu çalıştırın: mvn archetype:generate
  3. İstenen adımları izleyin - basit java web projesini (18) ve uygun bir adı seçin.
  4. Bittiğinde çalıştırın: mvn eclipse:eclipse
  5. Eclipse'i başlatın. Dosya -> İçe Aktar -> Mevcut projeyi seçin. Mvn hedeflerini çalıştırdığınız dizini seçin.
  6. Tutulma dönemindeki bir savaş projesine şimdi çok iyi bir başlangıç ​​yapmalısınız.
  7. mvn packageTutulma sırasında bir sunucu kurarak ve sadece projeyi sunucuya ekleyerek savaşı çalıştırarak veya konuşlandırarak savaşın kendisini yaratabilirsiniz .

Bazılarının dediği gibi, maven kullanmanın dezavantajı, maven geleneklerini kullanmak zorunda olmanızdır. Ama bence yeni başlıyorsanız, kendi kurallarınızı oluşturmaya başlamadan önce kuralları öğrenmek iyi bir fikirdir. Daha sonraki bir noktada kendi tercih ettiğiniz yönteme geçmenizi / yeniden düzenlemenizi durduracak hiçbir şey yoktur.

Bu yardımcı olur umarım.



3

Karınca derleme kodunu kullan Proje SMS'im için bunu kullanıyorum

<property name="WEB-INF" value="${basedir}/WebRoot/WEB-INF" />
<property name="OUT" value="${basedir}/out" />
<property name="WAR_FILE_NAME" value="mywebapplication.war" />
<property name="TEMP" value="${basedir}/temp" />

<target name="help">
    <echo>
        --------------------------------------------------
        compile - Compile
        archive - Generate WAR file
        --------------------------------------------------
    </echo>
</target>

<target name="init">
    <delete dir="${WEB-INF}/classes" />
    <mkdir dir="${WEB-INF}/classes" />
</target>

<target name="compile" depends="init">
    <javac srcdir="${basedir}/src" 
                destdir="${WEB-INF}/classes" 
                classpathref="libs">
    </javac>
</target>

<target name="archive" depends="compile">
    <delete dir="${OUT}" />
    <mkdir dir="${OUT}" />
    <delete dir="${TEMP}" />
    <mkdir dir="${TEMP}" />
    <copy todir="${TEMP}" >
        <fileset dir="${basedir}/WebRoot">
        </fileset>
    </copy>
    <move file="${TEMP}/log4j.properties" 
                    todir="${TEMP}/WEB-INF/classes" />
    <war destfile="${OUT}/${WAR_FILE_NAME}" 
                    basedir="${TEMP}" 
                    compress="true" 
                    webxml="${TEMP}/WEB-INF/web.xml" />
    <delete dir="${TEMP}" />
</target>

<path id="libs">
    <fileset includes="*.jar" dir="${WEB-INF}/lib" />
</path>


3

WEB-INF klasörünün dışında aşağıdaki komutu kullanın. Bu, savaş dosyanızı oluşturmalı ve bildiğim en hızlı yöntem.

(JDK 1.7+ kurulu ve JDK'nızın bin dizinine işaret eden ortam değişkenlerine ihtiyacınız olacak.)

jar -cvf projectname.war *

Referans Bağlantısı


Eğer alırsanız, 'jar' is not recognized as an internal or external commanddeneyin"%JAVA_HOME%\bin\jar" -cvf projectname.war *
Jawad Al Shaikh

2

Diğer bir seçenek de Eclipse kullanarak otomatik olarak oluşturmaktır. Elbette sürekli entegrasyon ortamınız varsa Ant veya Maven önerilir. Dışa aktarma alternatifi çok uygun değildir çünkü dışa aktarma özelliklerini her seferinde yapılandırmanız gerekir.

ADIMLAR:

  1. "Proje Arşivleri" desteğini etkinleştirin; bu, projenize bağlı olabilir (Java EE / Web projesinde kullandım). Proje kök dizinine sağ tıklayın; Yapılandır -> Proje Arşivleri Desteği Ekle.

  2. Gidin ve "Proje Arşivleri" üst dizininde yeni bir arşiv oluşturun. Yalnızca jar seçeneğiniz var, ancak arşivlediğiniz adı * .war.

  3. Dosya kümelerini, yani hangi dosyaların ekleneceğini yapılandırın. Tipik olarak, Web Dağıtımı Derlemesinin (proje özelliği) yapılandırılmasına benzer iki dosya kümesini yapılandırmaktır.

    • kopyala / WebContent to /
    • / sınıfları WEB-INF / sınıflarına kopyala / oluştur (arşivdeki WEB-INF / sınıflar dizinini tanımladıktan sonra bu dosya kümesini oluşturun)
  4. Bazı yapılandırma dosyalarını nereye yerleştirdiğinize bağlı olarak, fileset exclude özelliğini tweeklemeniz gerekebilir veya daha fazla dosya grubuna ihtiyacınız olabilir, ancak fikir, bunu yapılandırdıktan sonra değiştirmenize gerek olmamasıdır.

  5. Arşivi manuel olarak oluşturun veya doğrudan sunucuya yayınlayın; ancak Eclipse tarafından sizin için otomatik olarak oluşturulmuştur



0

Eclipse çalışma alanını da yenileyen daha basit çözüm:

<?xml version="1.0" encoding="UTF-8"?>
<project name="project" default="default">    
    <target name="default">
        <war destfile="target/MyApplication.war" webxml="web/WEB-INF/web.xml">
            <fileset dir="src/main/java" />
            <fileset dir="web/WEB-INF/views" />
            <lib dir="web/WEB-INF/lib"/>
            <classes dir="target/classes" />
        </war>
        <eclipse.refreshLocal resource="MyApplication/target" depth="infinite"/>
    </target>
</project>

0

Standart bir Eclipse dinamik Web Projesinden WAR dosyaları oluşturmak için basit Kabuk kodu. Linux platformunda RAM Dosya sistemi (/ dev / shm) kullanır.

#!/bin/sh

UTILITY=$(basename $0)

if [ -z "$1" ] ; then
    echo "usage: $UTILITY [-s] <web-app-directory>..."
    echo "       -s ..... With source"
    exit 1
fi

if [ "$1" == "-s" ] ; then
    WITH_SOURCE=1
    shift
fi

while [ ! -z "$1" ] ; do
    WEB_APP_DIR=$1

    shift

    if [ ! -d $WEB_APP_DIR ] ; then
        echo "\"$WEB_APP_DIR\" is not a directory"
        continue
    fi

    if [ ! -d $WEB_APP_DIR/WebContent ] ; then
        echo "\"$WEB_APP_DIR\" is not a Web Application directory"
        continue
    fi

    TMP_DIR=/dev/shm/${WEB_APP_DIR}.$$.tmp
    WAR_FILE=/dev/shm/${WEB_APP_DIR}.war

    mkdir $TMP_DIR

    pushd $WEB_APP_DIR > /dev/null
    cp -r WebContent/* $TMP_DIR
    cp -r build/* $TMP_DIR/WEB-INF
    [ ! -z "$WITH_SOURCE" ] && cp -r src/* $TMP_DIR/WEB-INF/classes
    cd $TMP_DIR > /dev/null
    [ -e $WAR_FILE ] && rm -f $WAR_FILE
    jar cf $WAR_FILE .
    ls -lsF $WAR_FILE
    popd > /dev/null

    rm -rf $TMP_DIR
done

-3

** Grails web projesinin Eclips Gaynemed'de Savaş dosyası oluşturma **

1. ithalat projesi:

2. datasource.groovy dosyasını değiştirin

Şunun gibi: url = "jdbc: postgresql: //18.247.120.101: 8432 / PGMS"

2.chnge AppConfig.xml

3. Java'yı Görev Yöneticisi'nden öldürün:

  1. tutulmalarda temiz komut çalıştır

  2. proje adına göre aktarılan 'prod war' çalıştırın.

  3. Günlük dosyasını kontrol edin ve aynı .war dosyasını aynı tarihe sahip workbench dizininde bulun.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.