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

我正在使用Drools Planner,它在目录binaries文件中附带了21个Jar文件。 例如, drools-core-5.3.0.Final.jar将提供org.drools.someClasses

包含的示例通过运行all-inclusive命令在命令行中运行它:

 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的答案,您可以按执行实例执行此操作。

最后,在Tomcat部署中,我给它一个HTTP接口,根据havexz的答案部署它。

如果jar子需要在全球范围内:

好吧,如果您希望这些jar子可供服务器上的所有应用程序使用,请尝试将它们放入

 `/lib` 

编辑: @Geoffery评论:如果您有权访问

 /conf/catalina.properties 

然后你可以添加自己的常见jar子像:

common.loader=${catalina.base}/lib,${catalina.base}/lib/*.jar,${catalina.home}/lib,${catalina.home}/lib/*.jar,${catalina.base}/your_common_jar_folder/*.jar

(最后仔细看,我添加了一个新文件夹)

但无论哪种方式,如果jar子意味着在全球范围内,它们应该在上面的任何文件夹中。 否则你必须为每个应用程序放置其他常见的jar用于日志记录和jdbc等。

如果jar子需要在app范围内

如果你想让这些jar子只使用一个特定的应用程序然后把它们放进去

 `/WEB-INF/lib` 

注意:您可以放置​​开发文件夹的/WEB-INF/lib ,如果您使用的是正确的工具,那么它将使这些jar成为.war文件的一部分。

侧面注意:由于您也从命令行运行java程序并且在添加依赖项jar时遇到问题。 有时回来我为此编写了一个shell脚本 ,希望这对你也有帮助。

它的小片段:

 Run Java easily from shell command Usage: easyrunjava [-c ,...] [-m ,...] [-p ,...] class_name [args_to_program] Example: `easyrunjava -p .,./dependency -m user.name@xyz.com com.example.HelloWorld` 

您是否尝试将所有jar放入classpath中的文件夹中? import是错误的话。

较新版本的java允许’*’作为类路径:

 $JAVA_HOME/bin/java -Xms256m -Xmx512m -server -cp 'binaries/*' ${mainClass} $* 

应该管用。 注意binaries/*是单引号以防止shell扩展。