我在eclipse中创建了一个java项目,如果我导出它就是一个可运行的jar。
我的项目结构:
当我将项目导出为可运行的jar时,它会询问我如何打包我的依赖项,并选择将其放在lib文件夹中。因此,在导出时,导出可运行的jar以及使用我的依赖jar文件创建一个子文件夹,我希望它只是位于Referenced库中的5个jar。
这是导出窗口:
这会创建我的runnable jar,然后创建一个文件夹_lib和我的其他jar。
这很好但是你在第一张图片中看到我也包含了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上的命令行运行应用程序。
答案 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进程。
希望这可以帮助将来的某些人。