Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tomcat 如何将库链接到java类路径?_Tomcat_War_Java - Fatal编程技术网

Tomcat 如何将库链接到java类路径?

Tomcat 如何将库链接到java类路径?,tomcat,war,java,Tomcat,War,Java,在Eclipse(Windows7)中,我创建了一个动态web项目。我的类使用许多外部库。这些文件已手动复制到目录WebContent/WEB-INF/lib/,并将包含在生成的WAR文件中(右键单击/Export/…)。WAR文件将部署在运行在Ubuntu服务器上的Tomcat6上 我的问题是是否可以“告诉”WAR文件在运行时使用哪些包。可能手动运行build命令并添加参数?或者这是复制文件的错误目录 我尝试了以下几点: 所有外部JAR都被复制到$JAVA_HOME/jre/lib/ext,因

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

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

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

在处理war时,一般的想法是创建一个war,可以部署到Tomcat的任何实例,而无需修改主机环境,由于权限、访问、所需的启动时间等原因,您不能总是这样做

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

正如你所注意到的,维护罐子可能是件痛苦的事。考虑使用Maven或至少Ant等构建工具


此外,Java环境中的JAR和运行在Tomcat上的应用程序可以访问的JAR是两个不同的集合。Tomcat不允许在其自身下运行的应用程序访问底层Java系统。您可以将所需的JAR放在TOMCAT_HOME\lib中,但由于前面所述的原因,不建议这样做。

排除您可以使用的lib

我可以想象您可以右键单击eclipse项目,然后导出->选择ant构建文件

从上面添加代码链接,一个例子,像这样,逐案请指定您的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>

//在您的案例中添加更多lib
//类路径将是./build/classes

为什么要这样做?在你的案例中,
WEB-INF/lib/
中的JAR有什么问题?请看我在Ray Stojonic的回答下的评论。我同意你的所有说法。但我只想在开发中使用这种行为,因为WAR文件现在有9MB的大小,而且上传不会让我们的互联网连接速度变得有趣!在本地安装Tomcat,以便进行测试。并告诉你的老板,由于网速太慢,他每天都在损失$$。