warファイルの作成方法


96

Tomcatで実行する(eclipseを使用して)warファイルを作成するベストプラクティスは何ですか?チュートリアル、リンク、例は高く評価されています。

回答:


98

Antを使用して、ソリューションをセットアップ、コンパイル、WAR、およびデプロイできます。

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

次に、Eclipseでワンクリックを実行して、そのAntターゲットを実行できます。以下に、各ステップの例を示します。

前提条件

コードが次のように構成されていると想定します。

  • ${basedir}/src:Javaファイル、プロパティ、XML構成ファイル
  • ${basedir}/web:JSPファイル
  • ${basedir}/web/lib:実行時に必要なJAR
  • ${basedir}/web/META-INF:あなたのマニフェスト
  • ${basedir}/web/WEB-INF:web.xmlファイル

セットアップ

setup配布ディレクトリを作成し、WARを直接行う必要があるアーティファクトをコピーするタスクを定義します。

<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>

コンパイル

Javaファイルをクラスにビルドし、src実行時に使用可能にする必要がある下にあるが、プロパティやXMLファイルなどのJava以外のアーティファクトをコピーします。

<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>

戦争を構築する

WAR自体を作成します。

<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>

配置する

最後に、WARをTomcatのデプロイ場所に直接デプロイするタスクを設定できます。

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

クリックして行きます!

これがすべてセットアップされたらdefault、Eclipseからターゲットを起動するだけで、ソリューションがコンパイル、WAR、およびデプロイされます。

このアプローチの利点は、Eclipse内だけでなくEclipse内でも機能し、プロジェクトに取り組んでいる他の開発者と(たとえば、ソース管理を介して)展開戦略を簡単に共有できることです。


よく私はそれをtomcatにデプロイしたいです。ターガーを変更するにはどうすればよいですか?

詳しく説明してもらえますか?$ {tomcat.deploydir}がTomcatコンテキストデプロイメントディレクトリを指している限り、そうする必要があります。番号?
デビッドシトロン

1
warターゲットでは、不要な「<exclude name = "WEB-INF / **" />」が存在します。* .classファイルをこのフォルダーに生成しましたが、それらを除外しても機能しません。動作するwarターゲットからこの除外行を削除します。
ankitjaininfo 2013

2
この答えは不必要に複雑です。
Alex R

38

[Eclipseからエクスポート]を常に選択しました。warファイルを作成し、必要なすべてのファイルを含めます。プロジェクトをWebプロジェクトとして作成し、それを行うだけで済みます。Eclipseを使用すると、実行が非常に簡単になります。


ありがとう!そして、それが価値のあるものについては、「ファイル」メニューから「エクスポート」を選択し、次に「エクスポート先の選択」で「WAR」と入力すると、warファイルオプションが表示されます。
Brad Parks

4
迅速で汚れたWebアプリの私の選択。テストWARを取得するためだけにantスクリプトを作成するのは、やりすぎです。
Renan 2012

antファイルを作成する代わりの別の解決策は、WARファイルにラップするフォルダーに移動して、このコマンド「jar -cvf name.war *」を実行することです。
MC

このおかげで、MavenやAntを構成するよりも簡単です(必要のない場合)。
サイモン2013

23

私たちはすべてのJavaプロジェクトにMaven(Antの兄貴)を使用しており、非常に気の利いたWARプラグインを持っています。チュートリアルと使用法がそこにあります。

Antよりもはるかに簡単で、Eclipseと完全に互換性があり(maven eclipse:eclipseを使用してEclipseプロジェクトを作成します)、簡単に構成できます。

Mavenのホームページ

Maven WARプラグイン

サンプル構成:

<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
私はあなたにあなたのポイントを返しました(それを削除したのは私ではありませんでした)。Mavenは、特定のバージョンの「構成よりも慣習」に当てはまる場合(そうしたい場合)は、当然の選択です。
David Citron、

1
たまたま好きです=)私はかなり大きなプロジェクトでCMとして働いています。プロジェクト構成の面倒な仕事をしてくれたことに感謝しています。また、プラグインのサポートも素晴らしいです。SurefireとCheckStyleを5分で使用して、WARプラグインを使用してマルチモジュールプロジェクトを稼働させることができるのは、すばらしいことです。Antは、よりオープンで間違いなく強力ですが、比較すると面倒です。とにかく、MavenはAntのサブセットであるため、そこでスクリプトを作成する必要がある場合は歓迎します。
mikek 2009年

4
MavenのXML構造に加えて、ANTに基づいており、ANTはMavenのサブセットとして組み込まれています。
mikek

14

warファイルはwar拡張子が付いたjarファイルですが、機能するのはコンテンツが実際にどのように構造化されているかです。

J2EE / Java EEチュートリアルを開始することができます。

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

また、サーブレット仕様には詳細が含まれています。

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

Eclipseで新しいWebプロジェクトを作成する場合(私はJava EEバージョンを指します)、構造が作成されます。また、Appserverがインストールされている場所を指定して、アプリケーションをデプロイして起動することもできます。

「Export-> WAR file」オプションを使用すると、warファイルを保存できます。


12

何をすべきかわからず、ゼロから始める場合は、Mavenがあなたを始める手助けをします。

以下の手順に従って、新しいwarプロジェクトの設定を完全に日食で取得できます。

  1. Mavenをダウンロードしてインストールする
  2. コマンドラインを実行します: mvn archetype:generate
  3. 指示された手順に従います-シンプルなJava Webプロジェクト(18)と適切な名前を選択します。
  4. 終了したら、実行します。 mvn eclipse:eclipse
  5. Eclipseを起動します。「ファイル」->「インポート」->「既存のプロジェクト」を選択します。mvnゴールを実行したディレクトリを選択します。
  6. それはあなたが今食の戦争プロジェクトに非常に良いスタートを持っているべきだということです
  7. mvn packageEclipseでサーバーをセットアップし、サーバーにプロジェクトを追加するだけで、戦争を実行またはデプロイして戦争自体を作成できます。

他の人がMavenを使用することの欠点は、Mavenの規則を使用する必要があるということです。しかし、もしあなたが始めたばかりなら、慣習を作る前に慣習を学ぶことは良い考えだと思います。後で自分の好みの方法に変更/リファクタリングするのを止めるものは何もありません。

お役に立てれば。



3

私のプロジェクトSMSに使用するAntビルドコードを使用する

<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>


2

別のオプションは、Eclipseを使用して自動的にビルドすることです。もちろん、継続的な統合環境がある場合は、AntまたはMavenをお勧めします。エクスポートプロパティは毎回構成する必要があるため、エクスポートの代替方法はあまり便利ではありません。

手順:

  1. 「プロジェクトアーカイブ」サポートを有効にします。これはプロジェクトに依存する可能性があります(私はJava EE / Webプロジェクトで使用しました)。プロジェクトのルートディレクトリを右クリックします。構成->プロジェクトアーカイブサポートの追加。

  2. 「プロジェクトアーカイブ」のトップディレクトリに移動して新しいアーカイブを作成します。jarオプションしかありませんが、*。warというアーカイブ名を付けます。

  3. Fileset-s、つまりどのファイルを含めるかを設定します。通常は、Web配置アセンブリ(プロジェクトプロパティ)の構成方法と同様に2つのファイルセットを構成します。

    • / WebContentを/にコピーします
    • / build / classesをWEB-INF / classesにコピーします(アーカイブでWEB-INF / classesディレクトリを定義した後でこのファイルセットを作成します)
  4. 一部の構成ファイルを配置した場所や、さらに多くのファイルセットが必要な場合は、ファイルセットの除外プロパティを変更する必要があるかもしれませんが、一度設定すると、変更する必要がないという考え方です。

  5. アーカイブを手動で構築するか、サーバーに直接公開します。Eclipseによって自動的にビルドされます



2

WEB-INFフォルダーの外で次のコマンドを使用します。これでwarファイルが作成され、私が知っている最も速い方法です。

(JDK 1.7以降がインストールされていて、JDKのbinディレクトリーを指す環境変数が必要です。)

jar -cvf projectname.war *

参照リンク


0

Eclipseワークスペースも更新するシンプルなソリューション:

<?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

標準のEclipse動的WebプロジェクトからWARファイルを作成するための単純なシェルコード。LinuxプラットフォームでRAMファイルシステム(/ dev / shm)を使用します。

#!/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プロジェクトのEclips GaynemedでWarファイルを作成中**

1.プロジェクトのインポート:

2. datasource.groovyファイルを変更する

このように:url = "jdbc:postgresql://18.247.120.101:8432 / PGMS"

2.chnge AppConfig.xml

3.タスクマネージャーからJavaを終了します。

  1. Eclipseでクリーンコマンドを実行する

  2. プロジェクト名の後に「prod war」を実行します。

  3. ログファイルを確認し、同じ日付のワークベンチのディレクトリで同じ.warファイルを見つけます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.