2008-10-04 277 views
2

那么有没有一种方法来初始化并启动命令行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在命令行或更好,但在清单文件?

这里的目标是简化弹簧应用程序作为可执行罐的创建。我希望我可以在清单中指定一些实用程序类作为Main-Class。我想我还需要指定应用程序的开始点,一个bean和一个开始该过程的方法。

+0

你只是没......它可以帮助你解释你正在努力完成的事情。你需要一种将Spring应用程序打包为可执行文件的方法吗? – noah 2008-10-04 23:00:46

+0

是的,目标是一个可执行的jar。 – sblundy 2008-10-04 23:06:43

回答

6

我会尽力回答这个问题,我的理解:

如何打包包含春天配置的罐子比如我只需要使用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 plugin的配置中,增加了主类的清单项
  3. maven shade plugin,这是负责收集所有依赖/类并将它们打包到一个jar中的插件。

当运行mvn package时,可执行jar将在target\stackoverflow-autostart-spring-app-0.1.jar上可用。

我有这个代码都在我的盒子上工作,但只是意识到我不能在这里附加一个zip文件。任何人都知道我可以这样做的地方,并链接到这里?

我创建了一个git repository at github与代码相关的这个问题,如果你想看看。

希望这会有所帮助。

3

是的。写一个简单的SpringMain,它将任意数量的xmlproperties文件作为参数。然后您可以(在主要方法中)从这些文件初始化应用程序。启动你的程序然后简单的问题:

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

然后使用生命周期属性(init-method)在您的相关豆来启动应用

相关问题