你如何编程'相对导入'jar文件目录?

时间:2012-01-20 06:07:38

标签: java jar tomcat6

我正在使用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部署它。

2 个答案:

答案 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扩展。