0

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

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

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

4

2 回答 2

1

使用战争时,一般的想法是创建一个可以部署到任何 Tomcat 实例的战争,而无需修改主机环境,由于权限、访问、所需的正常运行时间等原因,您不能总是这样做。

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

正如您所注意到的,维护罐子可能会很痛苦。考虑使用诸如 Maven 或至少 Ant 之类的构建工具。

此外,Java 环境中的 jar 和运行在 Tomcat 上的应用程序可访问的 jar 是两个不同的集合。Tomcat 不会为在其下运行的应用程序提供对底层 Java 系统的访问权限。您可以将所需的 jars 放在 TOMCAT_HOME\lib 中,但由于前面所述的原因,并不真正推荐这样做。

于 2013-11-08T14:19:31.160 回答
0

对于排除库,您可以使用战争任务

我可以想象你可以右键单击你的 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>
于 2013-11-08T14:22:59.700 回答