如何链接用于java类路径的库?

时间:2013-11-08 14:07:29

标签: tomcat war java

在Eclipse(Windows 7)中,我创建了一个动态Web项目。我的类使用许多外部库。这些被手动复制到目录WebContent/WEB-INF/lib/中,并将包含在构建中生成的WAR文件中(右键单击/导出/ ...)。 WAR文件将部署在运行在Ubuntu服务器上的Tomcat 6上。

我的问题是,如果可以“告诉”WAR文件在运行时使用哪些包。也许手动运行build命令并添加参数?或者这是文件复制的错误目录吗?

我尝试了以下内容: 所有外部JAR都被复制到$JAVA_HOME/jre/lib/ext,因此它们应该自动出现在类路径中。在导出和部署WAR文件之前,我删除了WebContent/WEB-INF/lib/中的所有JAR。但这会导致服务器端出现ClassNotFound异常。

2 个答案:

答案 0 :(得分:1)

在处理战争时,一般的想法是创建一个可以部署到任何Tomcat实例的战争,而不必修改主机环境,由于权限,访问权限,所需的运行时间,你不能总是这样做,等

也就是说,您的应用所依赖的任何库都应该出现在战争中,WEB-INF/lib

正如您所注意到的,保持罐子可能会很痛苦。考虑使用Maven或至少Ant等构建工具。

此外,Java环境中的jar和Tomcat上运行的应用程序可访问的jar是两个不同的集合。对于在其自身下运行的应用程序,Tomcat不允许访问底层Java系统。你可以把你需要的罐子放在TOMCAT_HOME \ lib中,但是出于以前说明的原因,这并不是真正推荐的。

答案 1 :(得分:0)

要排除lib,您可以使用war task

我可以想象您可以右键单击您的eclipse项目然后导出 - >选择ant Buildfiles

添加上面链接的代码,例如,这样,请逐个指定您的html,图像,输出类文件夹,等等。

<war destfile="myapp.war" webxml="src/metadata/myapp.xml">
  <fileset dir="src/html/myapp"/> 
  <fileset dir="src/jsp/myapp"/>
  <lib dir="thirdparty/libs">
    <exclude name="jdbc1.jar"/> // add more lib in your case
  </lib>
  <classes dir="build/main"/> // the class path would be ./build/classes
  <zipfileset dir="src/graphics/images/gifs"
              prefix="images"/>
</war>