2008-10-04 475 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)在您的相關豆來啓動應用

相關問題