将外部jar包包含在Tomcat ClassPath中

20

我希望在Tomcat中使用Web应用程序内的一个jar文件,该jar文件将存在于Tomcat目录之外。

为了将这个jar文件包含在Tomcat类路径中,我修改了TomcatHome/conf/catalina.properties文件,将我jar文件的绝对路径添加进去,例如:

shared.loader=D:\jaa\MyJarFile.jar

根据链接中的建议,

http://www.mulesoft.com/tomcat-classpath

但它抛出了错误,

java.lang.NoClassDefFoundError

我也尝试过,

shared.loader=D:\jaa\*.jar

shared.loader=file:\\D:\jaa\MyJarFile.jar

它们似乎都不起作用 :(

如果我尝试将jar文件放在tomcat / lib中,它似乎可以工作。 但是我不被允许这样做。

由于我下周必须实现,请帮我解决这个问题。


你尝试过这样写吗:file://path/to/foldername/jarname.jar?你的语法不同。 - Cratylus
当我在服务器启动时使用正斜杠(/)时,Tomcat会引发IllegalArgumentsException异常。因此,我必须使用反斜杠(file:\D:\jaa\PatMS.jar)。 - Sathesh
对我有效的方法是使用引号和正斜杠,例如_shared.folder="C:/Program Files/Java/jdk1.8.0_121/db/lib/*.jar"_(在Windows系统上)。 - D.Ogranos
3个回答

15

我自己摸索出如何为Tomcat添加类路径。不必编辑catalina.properties文件,只需在Tomcat Bin目录中创建一个名为“setenv.sh”的文件,并在其中加入类路径即可。

示例:

CLASSPATH=D:\jaa\MyJarFile.jar

我刚刚查看了Tomcat/bin中的catalina.sh文件,这些classpath变量将在将引导程序设置为类路径时设置。


3
值得注意的是,CLASSPATH 环境变量在 catalina.sh 中被显式地 取消设置,因此您必须编辑 setenv.sh 来设置它。 - z0r

1
我正在使用IntelliJ,尝试了以下所有方法:
  1. 使用CtrlAltShiftS(项目设置),添加mysql-connector.jar依赖项。但是没有起作用。(唯一有效的是IntelliJ内的代码完成正常工作)。
  2. mysql-connector.jar添加到apache-home/lib/文件夹中。但是没有起作用。
  3. 在IntelliJ中从Maven中包含mysql-connector.jar。只是没用。
对我有效的方法:mysql-connector.jar文件包含在PROJECT/web/WEB-INF/lib文件夹中。
无需在任何地方添加它作为依赖项。只需编译即可正常工作。

0
我发现自己在复制额外的JAR文件,这些文件应该对所有上下文可用,因此应该放入根加载器中,放入以下目录中:
 C:\Program Files\Apache Software Foundation\Tomcat 9.0\lib

但是这只有在您可以访问此目录的情况下才可能实现,而这对于所有ISP来说可能并非如此。至少您可以在家里做到这一点。

再见


2
这将使得JAR文件对服务器中部署的所有Web应用程序都可用。问题提到了一个Web应用程序。 - Sathesh
将其放入Web应用程序上下文的WEB-INF/lib中。它将被上下文类加载器自动加载。 - user502187

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接