Mac上的CLASSPATH,以及Mac如何寻找mysql-connector-java-bin.jar

Mac OS X 10.6上是否有默认的类路径? 当我echo $CLASSPATH ,什么都不会出现。 在我的.profile ,我只看到PATH变量被设置。 我的问题是我的servlet似乎无法找到一个合适的驱动程序来连接到mysql服务器。 我使用EclipseGlassfish v3MAMP用于MYSQL服务器。

有几种方法可以让Java在Mac OS X上看到JAR:

  • 将它放在/ Library / Java / Extensions中
  • 创建/编辑CLASSPATH环境变量
  • 使用-cp选项显式指定类路径。

默认情况下不设置CLASSPATH环境变量,但是,如果您愿意,可以设置它。 但请注意,您在~/.profile设置的任何环境变量只会在终端会话中生效,不会影响任何GUI应用程序。 如果要设置环境变量以使它们影响GUI应用程序,可以创建一个名为~/.MacOSX/environment.plist的文件,其中包含您的环境变量。 对该文件所做的任何更改将在您下次登录时生效。

正如已经观察到的那样,将JAR放在extensions文件夹中或修改CLASSPATH环境变量通常是坏主意,因为它们可能导致依赖地狱。 更好的方法是将JAR与工件捆绑在一起,并适当地设置元数据,以便它们位于工件的类路径中。 如果使用Apache Maven2构建工件,则可以自动下载以及捆绑任何第三方依赖项,并为工件设置适当的类路径。

不要使用CLASSPATH环境变量。 这是便携性问题。 整个环境变量是Sun家伙的错误。 它只适用于初学者,但肯定不适用于现实世界。 这只会在之后更多地混淆初学者。 此外,appservers(和IDE)完全忽略了这个环境变量。 不要将库放在JRE或JDK库中。 这也是可移植性问题。 如果升级JRE / JDK或在其他地方运行应用程序,它将不再起作用。

在webapplications中,您通常只需在Webapp/WEB-INF/lib删除特定于webapp的第三方库。 该文件夹由webapp的默认类路径覆盖。 如果这些库是特定于appserver的(例如,需要JDBC驱动程序来创建由appserver管理的JNDI数据源),那么您需要将它们放在Appserver/lib 。 此文件夹由appserver的默认类路径覆盖。 对于Glassfish,您需要将其更具体地放在特定于域的/lib文件夹中,例如glassfish/domains//lib

我对这个问题很挣扎。 尝试将appserv-rt.jar(位于Glassfish lib目录中)添加到项目的构建路径中。 (如果你想避免这种情况,首先用jar创建一个库,然后将库添加到你的构建路径中,我不会拖动它的所有依赖项。