在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
异常。
答案 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>