2

春の MVC と休止状態のアプリケーション用に複数の Maven モジュールがあります。

私のレイアウトは次のとおりです。

/myapp-web
/myapp-web/src/main/java
/myapp-web/src/main/webapp
/myapp-web/src/main/webapp/web-inf
/myapp-web/src/main/webapp/web-inf/web.xml
/myapp-web/src/main/webapp/web-inf/web-context.xml (spring wiring code etc)
/myapp-web/src/main/webapp/web-inf/config/hibernate.cfg.xml
/myapp-web/src/main/webapp/assets/... (folder for css, javascript, images)
/myapp-web/src/main/webapp/views (folders with freemarker .ftl files)

私のpom.xml:

    ..
    <packaging>war</packaging>
    ..
    <dependency>
        <artifactId>jetty-server</artifactId>
        <groupId>org.eclipse.jetty</groupId>
        <version>${jetty-version}</version>
    </dependency>
    <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-servlet</artifactId>
        <version>${jetty-version}</version>
    </dependency>
    <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-webapp</artifactId>
        <version>${jetty-version}</version>
    </dependency>

正常にセットアップして実行できる組み込み桟橋の別のインスタンスがあります。Ubuntuで動作するように、開始/停止スクリプトもセットアップしました。これはSpring MVCアプリケーションではなかったので、web.xmlファイルなどがないので簡単でし た./assembly/assembly.xmlファイルを作成しました.Spring MVCアプリケーションでもそれを行う必要がありますか?

次に、これを pom.xml プラグイン セクションに追加しました。

         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>${maven-assembly-plugin}</version>
            <configuration>
                <descriptors>
                    <descriptor>src/main/assembly/assembly.xml</descriptor>
                </descriptors>
            </configuration>
        </plugin>
        <!-- jar plugin -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>${maven-jar-plugin}</version>
            <configuration>
                <archive>

                </archive>
            </configuration>
        </plugin>
        <!-- jetty plugin -->
        <plugin>
            <!-- This plugin is needed for the servlet example -->
            <groupId>org.mortbay.jetty</groupId>
            <artifactId>jetty-maven-plugin</artifactId>
            <version>${jetty-version}</version>
        </plugin>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.1</version>
            <executions>
                <execution>
                    <goals>
                        <goal>java</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <mainClass>com.myapp.HttpServer</mainClass>
            </configuration>
        </plugin>

spring mvc アプリケーションでも同じことを行う必要がありますか?

スタックオーバーフローでいくつかのスレッドを見つけましたが、ant を使用していないため、ant の部分がわかりません。Mavenで動作するように移植する方法もわかりません:

単一のサーブレットの例以外に、これを行う方法に関する単一の適切なリファレンスがないことに驚いています。

このために /assembly/assembly.xml ファイルを作成する必要がありますか、それとも Web アプリケーションの場合は異なりますか?

これを機能させるために、誰かがこれを段階的に説明してもらえますか? 私のプロジェクトに必要なものは何でも投稿しますが、現在の環境にあるものはすべてカバーしたと思います。

  • マルチMavenセットアップの使用
  • 春のmvc
  • 冬眠する
  • テンプレートのフリーマーカー
  • フォルダ構造は上記のとおりです

目標は、この war ファイルを展開し、起動/停止スクリプトを作成して、これをサーバーに展開し、jetty インスタンスを起動/停止できるようにすることです。

4

3 に答える 3

8

assembly.xml ファイルは必要ありません。

Jetty は、スプリング化されているかどうかにかかわらず、webapp を開始するために使用されます。そのため、メイン クラスに Jetty サーバーを作成し、webapp コンテキストを追加してサーバーを起動する必要があります。この問題は 2 つの方法で解決できます。 - 「一般的な」Java EE サーバーと同様に web.xml を作成し、この記述子を Jetty サーバーに追加します。- サーブレット コンテキスト プログラムを使用して、Spring コンテキストをメイン クラスにロードします: https://github.com/s4nchez/jetty-spring-mvc-jar

于 2012-07-04T12:05:49.570 に答える
1

assembly.xmlファイルは、主にzipファイルの作成に使用されます。単純なWebアーカイブの場合、warファイルのmavenの通常の構造で十分です。

マルチモジュールの例を求めました。アプリのヒューズの例を探すことをお勧めします。アプリヒューズフレームワークを使用しなくても、Mavenファイルの構造は良好です。クイックスタートを使用して、マルチモジュールの休止状態のSpringMVCアプリケーションを作成しました。

プロジェクトのディレクトリ構造です。

D:.
    core
        src
            main
                java
                resources
                    META-INF
    src
        site
    web
        src
            main
                java
                    com
                    mycompany
                        webapp
                            controller
                            filter
                            jsp
                            listener
                            search
                            spring
                            taglib
                            util
            resources
                META-INF
            webapp
                common
                decorators
                images
                scripts
                    calendar
                WEB-INF

これは、Webプロジェクトpom.xmlの関連部分です。

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

<parent>
    <groupId>com.mycompany</groupId>
    <artifactId>myproject</artifactId>
    <version>1.0-SNAPSHOT</version>
    <relativePath>../pom.xml</relativePath>
</parent>

<artifactId>web</artifactId>
<packaging>war</packaging>

<build>
    <plugins>
        <plugin>
            <groupId>org.mortbay.jetty</groupId>
            <artifactId>maven-jetty-plugin</artifactId>
            <version>6.1.26</version>
            <configuration>
                <contextPath>/</contextPath>
                <scanIntervalSeconds>3</scanIntervalSeconds>
                <scanTargetPatterns>
                    <scanTargetPattern>
                        <directory>src/main/webapp/WEB-INF</directory>
                        <excludes>
                            <exclude>**/*.jsp</exclude>
                        </excludes>
                        <includes>
                            <include>**/*.properties</include>
                            <include>**/*.xml</include>
                        </includes>
                    </scanTargetPattern>
                </scanTargetPatterns>
            </configuration>
        </plugin>
    </plugins>
...
<dependencies>
    <dependency>
        <groupId>${project.parent.groupId}</groupId>
        <artifactId>core</artifactId>
        <version>${project.parent.version}</version>
    </dependency>
 ...
</dependencies>
</project>

コアプロジェクトに依存しています。マルチモジュールプロジェクトをコンパイルするときはいつでも、必要なすべての部分があります。ただし、Webプロジェクトディレクトリからのみ作業する必要がある場合。コアディレクトリでmvninstallを実行する必要があります。これにより、ローカルリポジトリにインストールされ、Webプロジェクトで使用できるようになります。コアプロジェクトに変更を加えた場合は、メインディレクトリからコンパイルする必要があります。それ以外の場合は、通常どおりWebプロジェクトディレクトリからmavenを使用できます。

ご覧のとおり、assembly.xmlファイルは必要ありません。warファイルよりも複雑な構造には、assembly.xmlファイルを使用する必要があります。たとえば、;を含むカスタムインストーラー構造です。warファイル、ヘルプファイル、Webサーバー実行可能ファイル、それらすべてをまとめるためのインストーラーファイル。

メインディレクトリでmvnpackageコマンドを使用してwarファイルを作成できます。また、Webプロジェクトディレクトリでjetty:runコマンドを使用して、jettyを実行し、Webアプリケーションをテストすることもできます。

于 2012-07-06T07:30:30.387 に答える
0

最小限の変更で使用できると思う非常によく似た設定があります。maven、spring、hibernate、freemarkerなどを使用してWebアプリケーションを実行しています。assembly.xmlやantタスクは必要ありません。

私のアプローチは、アプリケーションをjarとしてパッケージ化することです。この瓶には、突堤を開始し、本質的に戦争として展開するメインクラスがあります。詳細については、こちらをご覧ください。

http://draconianoverlord.com/2009/01/10/war-less-dev-with-jetty.html

このクラスは、ポート番号などのパラメーターを取得するように簡単にカスタマイズできます。

アプリケーションを実行するには、2つの良い選択肢があると思います。

Javaでクラスを実行するだけです。ただし、ここでの落とし穴は、クラスパスを正しく設定することです。このために、私はmavenのdependency:build-classpathゴールを使用します。これにより、Java実行コマンドで使用できる完全なクラスパスが出力されます。これの欠点は、これを実行しているマシンでMavenとMavenリポジトリを構成する必要があることです。私の場合、これは許容範囲であり、このアプローチは非常にうまく機能します。

または、依存関係のある実行可能jarを作成することもできます。このために、Mavenシェードプラグインをお勧めします。http://maven.apache.org/plugins/maven-shade-plugin/examples/executable-jar.htmlを参照してください。このアプローチの欠点は、クラスパスエラーと依存関係の問題が困難になる可能性があるため、1つの巨大なファイルになってしまうことです。解決する。また、ライブラリがMeta-Infファイルに依存している場合、ライブラリが相互に上書きすることがあります。Mavenシェードプラグインはこれを回避する方法を提供しますが、それでも問題を診断するのは難しい場合があります。

これらのアプローチはどちらも、現在のフォルダー構造やweb.xmlなどを維持できるはずですが、問題が発生した場合は、コメントでお知らせください。回答を拡大できます。

于 2012-07-11T18:23:02.940 に答える