如何指定一个可运行的jar来使用tomcat的lib作为依赖项

时间:2017-02-16 13:04:20

标签: java eclipse jar

我在eclipse中创建了一个java项目,如果我导出它就是一个可运行的jar。

我的项目结构:

enter image description here

当我将项目导出为可运行的jar时,它会询问我如何打包我的依赖项,并选择将其放在lib文件夹中。因此,在导出时,导出可运行的jar以及使用我的依赖jar文件创建一个子文件夹,我希望它只是位于Referenced库中的5个jar。

这是导出窗口:

enter image description here

这会创建我的runnable jar,然后创建一个文件夹_lib和我的其他jar。

enter image description here

这很好但是你在第一张图片中看到我也包含了Tomcat lib库,因为我的项目使用了tomcat lib中的一些jar文件。

问题是当我导出时,tomcat lib中的所有jar文件都会导出到我不想要的子lib文件夹。

基本上我想将我的runnable部署到一个服务器,它将从子目录lib中获取相关的jar文件,只有图像中的5个jar文件(Referenced Libraries)。 Tomcat安装在服务器上,因此应该指向tomcats lib来获取其余的jar。

希望我的项目使用生成的lib文件夹,然后使用tomcat lib。

希望我的意思是有道理的。

使用Eclipse和java 1.7。在windows上开发,部署到Linux,通过linux box上的命令行运行应用程序。

1 个答案:

答案 0 :(得分:0)

我所做的工作是在Linux端通过指定类路径以另一种方式启动java可运行类,这将使您尝试运行的类能够首先检查您指定的文件夹。因此在我的示例中,而不是使用以下内容在Linux机器上执行我的应用程序:

nohup java -jar /usr/local/P6/StockListShunter/StockListShunter.jar &

我做了以下操作,并指定了java应该检查.jar文件依赖项的类路径库:

nohup java -classpath :/usr/mylib1/*:/usr/StockListShunter_lib/*:/usr/share/lib/*:  stockListShunter.Shunter &

注意我在运行我的可运行类mylib1,StockListShunter_lib和lib时指定了3个java库。

在指定类路径后,您将看到需要指定您的java类,这将是您的主要方法类。在我的例子中,它是stockListShunter.Shunter,其中stockListShunter是我的包名。

请注意,您应该确保您尝试执行的类包含在您在类路径中指定的其中一个jar文件中,否则它将找不到该类,您将收到错误:{{1} }

因此,当您运行该命令时,该过程将启动,我的程序处于循环中,因此该过程将处于活动状态,直到我将其杀死为止。如果您的程序应该处于活动状态,则可以通过运行以下命令确认它正在运行。

Error: Could not find or load main class stockListShunter.Shunter

ps aux | grep stockListShunter.Shunter 是您的主要班级名称。这应该显示命令中有stockListShunter.Shunter的所有进程。

如果你想像我一样结束循环,你可以运行以下命令。

stockListShunter.Shunter

再次,pkill -f 'java.*stockListShunter.Shunter' 是您的主要班级名称。这应该会杀死你的java进程。

希望这可以帮助将来的某些人。