2013-02-14 78 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的相关性(压平),包括在你的构建生成的最终神器内容。

相关问题