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

我将尝试按照我的理解回答这个问题:

如何打包一个包含我只需要使用的 spring 配置的 jar java -jar myjar.jar

您在问题中的代码片段很有效。您不必参数化context.xml. 您只需将代码及其依赖项(spring 等)捆绑在一个 jar 中,并在 jar 文件中为主类提供适当的清单条目。

我个人使用maven 2,这是一个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.xmlsrc/main/resources目录中。

所以在这pom.xml有几个重要的点:

  1. 弹簧依赖性(我相信不言自明)
  2. maven jar 插件的配置,它将主类添加为清单条目
  3. maven shade 插件,该插件负责收集所有依赖项/类并将它们打包到一个 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

然后,您使用相关 bean 上的生命周期属性 ( init-method) 来启动应用程序

于 2008-10-05T15:20:41.573 回答