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

Tha*_*ham 3 java jdbc classpath

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

Mic*_*yan 11

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

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

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

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

  • 使用Servlet容器时,前两个建议是BAD建议,第三个建议实际上不是一个选项,您应该将.jar文件包含在您正在部署到Servlet容器的.war的lib目录中. (3认同)
  • 你不应该有一个CLASSPATH它会使你的机器变得脆弱并且充满了.jar冲突. (2认同)

Bal*_*usC 5

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

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