你如何编程’相对导入’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`
注意:您可以放置开发文件夹的
,如果您使用的是正确的工具,那么它将使这些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扩展。