2013-02-14 76 views
0

我想寫一個服務的問題。我正在嘗試創建一個在Windows系統的後臺運行但使用java的服務。我已經看到了幾種這樣做的方法,但決定採用一種似乎符合我要求的方法。該服務將檢查數據庫中需要處理的項目。當它在數據庫中找到它需要執行的項目時,它將運行一些系統命令來照顧它們。如何在我的jar中包含外部類

我找到了一種方法來使用tomcat7.exe文件來運行一個jar作爲一項服務,這對基本的東西工作得很好。只要我寫入並編譯到我的jar文件「myService.jar」中,我們就可以調用它。問題是我們已經有了幾個類,用於訪問數據庫並運行預編譯在名爲BGLib-1.0.jar的類庫中的命令。

我已經用這個庫編寫了幾個jenkins插件,並沒有問題從它調用函數。當我創建一個hpi文件並將它部署在Jenkins中時,它們都可以正常工作。在那裏,編譯器(使用Maven的Eclipse)將BGLib jar與插件jar打包在一起,Jenkins計算出如何讓他們看到彼此。

但是,當我構建我的服務jar時,在部署它時它不起作用。

我運行如下命令來安裝Tomcat的exe文件重命名爲myservice.exe:

d:\myService\bin>myService.exe //IS//myService --Install=D:\myService\bin\myService.exe --Description="run some commands 
Java Service" --Jvm=auto --Classpath=D:\myService\jar\myService.jar;D:\myService\jar\BGLib-1.0.jar --StartMode=jvm -- 
StartClass=com.myCompany.myService.myService --StartMethod=windowsService --StartParams=start --StopMode=jvm --StopClass 
=com.myCompany.myService.myService --StopMethod=windowsService --StopParams=stop --LogPath=D:\myService\logs --StdOutpu 
t=auto --StdError=auto 

當我單獨在myService.jar如預期的服務行爲代碼部署這一點,但是當我嘗試在BGLib-1.0.jar中調用函數,我什麼也得不到。 jvm似乎崩潰或無響應。調試有點棘手,但它看起來像我沒有發現類錯誤。

我試着在POM文件中添加下面的條目來查看在清單中更改類路徑條目是否有幫助,但是它沒有更改清單。對於清單文件的工作方式,我仍然無能爲力。任何文檔都很酷。我去過Maven的網站,它似乎沒有關於可用標籤的全面文檔。我需要在清單中更改一些東西來讓我的jar看到外部類嗎?還是有什麼我可以添加,將讓Maven從我的jar中的jar中編譯類?

在此先感謝。

<configuration> 
      <archive> 
      <manifest> 
       <addClasspath>true</addClasspath> 
       <mainClass>com.myCompany.myService.myService</mainClass> 
       <customClasspathLayout>BGLib-1.0.jar</customClasspathLayout> 
      </manifest> 
      </archive> 
     </configuration> 
+0

你看過[maven-assembly-plugin](http://maven.apache。組織/插件/ Maven的組裝插件/)?它將允許你創建一個包含你的代碼,它的依賴關係,運行它的腳本等的發行版。 – sbk 2013-02-14 15:56:28

回答

0

要回答這個標題的主要問題,您可以將shade plugin包括依賴到你最終的罐子。甚至可以在最終jar中重定位類文件(例如,更改包名稱),以便包含的類不會與類路徑上不同版本的着色依賴項發生衝突。不知道這是否是針對您特定問題的最佳解決方案。

0

您可以使用maven-dependency-plugin unpack-dependencies goal在生成的工件中包含依賴項的內容。

如何做到這將是一個例子:

 <plugin> 
      <artifactId>maven-dependency-plugin</artifactId> 
      <executions> 
       <execution> 
        <id>${project.artifactId}-fetch-deps</id> 
        <phase>generate-sources</phase> 
        <goals> 
         <goal>unpack-dependencies</goal> 
        </goals> 
        <configuration> 
         <outputDirectory>${project.build.outputDirectory}</outputDirectory> 
         <stripVersion>true</stripVersion> 
         <excludeTransitive>true</excludeTransitive> 
         <includeArtifactIds>protobuf-java</includeArtifactIds> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

這將擴大的protobuf-java的相關性(壓平),包括在你的構建生成的最終神器內容。

相關問題