我正在使用Drools Planner,它在目录binaries
中附带了21个Jar文件。比如说
drools-core-5.3.0.Final.jar
会提供org.drools.someClasses
。
包含的示例通过运行全包命令在命令行中运行它:
mainClasspath=
for i in binaries/*.jar; do mainClasspath=${mainClasspath}:$i; done
mainClass=org.drools.planner.examples.app.DroolsPlannerExamplesApp
$JAVA_HOME/bin/java -Xms256m -Xmx512m -server -cp ${mainClasspath} ${mainClass} $*
我正在命令行中开发程序。但是最终的应用程序(只是添加了一个HTTP接口)在JSP容器中运行,而不是从命令行运行。因此,我需要以编程方式将jar文件导入到我的项目中。
问题:如何以编程方式导入jar文件?
我是否必须在环境变量中指定binaries
路径?
我这样做是为了告诉Java全局,可以在同一目录中找到额外的类,即.
和/home/jesvin/dev/drools/binaries
。请注意,:
是Linux中的分隔符。
declare -x CLASSPATH='.:/home/jesvin/dev/drools/binaries'
您可以按照Miserable Variable's answer按执行实例执行此操作。
最后,在Tomcat部署中,我给它一个HTTP接口,按havexz's answer部署它。
答案 0 :(得分:4)
如果罐子需要在全球范围内:
如果您希望这些jar可供服务器上的所有应用程序使用,请尝试将它们放入
`<tomcat_install_dir>/lib`
编辑: @Geoffery评论:如果您有权访问
<tomcat_install_di>/conf/catalina.properties
然后你可以添加自己的公共罐子像:
common.loader=${catalina.base}/lib,${catalina.base}/lib/*.jar,${catalina.home}/lib,${catalina.home}/lib/*.jar,${catalina.base}/your_common_jar_folder/*.jar
(最后仔细查看,我添加了一个新文件夹)
但无论如何,如果罐子意味着在全球范围内,它们应该在任何上述文件夹中。否则你必须为每个应用程序安装其他常见的jar用于日志记录和jdbc等。
如果广告需要在应用范围内
如果您希望这些罐子只使用一个特定的应用程序,那么将它们放入
`<your_web_app>/WEB-INF/lib`
注意:您可以放置开发文件夹的<your_web_app>/WEB-INF/lib
,如果您使用的是正确的工具,那么它将使这些jar成为您的.war
文件的一部分。
SIDE注意:由于您也从命令行运行java程序,并且在添加依赖项jar时遇到问题。有时为了这个目的回到I wrote a shell script,希望这对你也有帮助。
它的小片段:
Run Java easily from shell command
Usage: easyrunjava [-c <jar_name/jar_dir>,<jar_name/jar_dir>...] [-m <email_id1>,<email_id2>...] [-p <prop_file1>,<prop_file2>...] class_name [args_to_program]
Example:
`easyrunjava -p .,./dependency -m user.name@xyz.com com.example.HelloWorld`
答案 1 :(得分:2)
您是否尝试将所有jar放入classpath中的文件夹中?那么import
是错误的。
较新版本的java允许'*'作为类路径:
$JAVA_HOME/bin/java -Xms256m -Xmx512m -server -cp 'binaries/*' ${mainClass} $*
应该有效。注意binaries/*
使用单引号来防止shell扩展。