2

main メソッドを記述せずにコマンド ライン Spring アプリを初期化して開始する方法はありますか。そのようなメインメソッドはすべて同じ形式のようです

public static void main(final String[] args) throws Exception {
    ApplicationContext ctx = new ClassPathXmlApplicationContext("context.xml", Boot.class);
    FooService fooService = (FooService) ctx.getBean("fooService");
    fooService.bar();
}

それは複雑ではないと思いますが、誰かがcontext.xmlコマンドラインで、またはマニフェストファイルで指定する方法を提供する方法を見つけましたか?

ここでの目標は、Spring アプリケーションを実行可能な jar として簡単に作成できるようにすることです。Main-Classマニフェストでユーティリティ クラスを として指定できることを願っています。アプリの開始点、Bean、およびプロセスを開始するメソッドも指定する必要があると思います。

4

2 に答える 2

6

私はそれを理解しながら質問に答えようとします:

私が使用する必要があるようなスプリング構成を含むjarをパッケージ化する方法はjava -jar myjar.jar

質問にあるコードスニペットは単純に機能します。をパラメータ化する必要はありませんcontext.xml。コードとその依存関係(スプリングなど)を単一のjarにバンドルし、jarファイルのメインクラスの適切なマニフェストエントリを含める必要があります。

私は個人的にmaven2を使用していますが、これは私が使用するpom.xmlです。

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.stackoverflow</groupId>
  <artifactId>stackoverflow-autostart-spring-app</artifactId>
  <version>0.1</version>

  <dependencies>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring</artifactId>
      <version>2.5.2</version>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <artifactId>maven-jar-plugin</artifactId>
        <configuration>
          <archive>
            <manifest>
              <mainClass>com.stackoverflow.spring.autostart.Autostart</mainClass>
            </manifest>
          </archive>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>

これは、Javaコードのパッケージ名を想定しており、ソースコードはsrc/main/javaディレクトリにあり、ファイルcontext.xmlはディレクトリにありますsrc/main/resources

したがって、これpom.xmlにはいくつかの重要なポイントがあります。

  1. 春の依存関係(私はそれ自体を語っています)
  2. マニフェストエントリとしてメインクラスを追加するmavenjarプラグインの構成
  3. Mavenシェードプラグイン。これは、すべての依存関係/クラスを収集し、それらを1つのjarにパッケージ化するためのプラグインです。

実行可能jarは、の実行target\stackoverflow-autostart-spring-app-0.1.jar時に使用可能になりますmvn package

このコードはすべて自分のボックスで機能していますが、ここにzipファイルを添付できないことに気づきました。私がそうしてここにリンクできる場所を知っている人はいますか?

チェックアウトしたい場合は、この質問に関連するコードを使用してgithubにgitリポジトリを作成しました。

お役に立てれば。

于 2008-10-04T23:53:37.340 に答える
3

はい。SpringMain任意の数のxmlpropertiesファイルを引数としてとる単純なものを書きます。その後、(main メソッドで) これらのファイルからアプリケーションを初期化できます。プログラムを開始するのは、次のことだけです。

java -cp myapp.jar util.SpringMain context.xml

init-method次に、関連する Bean でライフサイクル属性 ( ) を使用して、アプリケーションをキックスタートします。

于 2008-10-05T15:20:41.573 に答える