如果在运行JSF应用程序时没有通过Maven添加,IntelliJ不使用外部Jar?

时间:2013-04-19 21:30:19

标签: java maven tomcat intellij-idea dependencies

我有一个非常简单的代码行,从.xhtml文件(在JSF 2.0项目中)调用,看起来像:

try {
    Class.forName("com.mysql.jdbc.Driver");
}catch(Exception e) {
    e.printStackTrace();
}

所以在我的C:\文件夹中我有文件: mysql-connector-java-5.1.24-bin 。我在IntelliJ Idea 12中添加了这个jar作为一个外部jar。

当我像这样启动我的应用程序时,我得到“Class not found exception”。但是,当我将此依赖项添加到我的pom.xml文件时:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.6</version>
</dependency>

我没有异常,类被正确加载。

以下是截图:enter image description here

我用绿色下划线的jar文件是从**文件外部添加的Jar - &gt;项目结构 - &gt;图书馆**

我用红色下划线的那个是由maven下载的jar文件。

我的问题是:虽然我已经在外部添加了Jar,但为什么我会收到Class not found异常?

如果我需要一个我无法通过maven下载的Jar文件,我该怎么办?

一个额外的信息:我创建了一个只有一个类的示例Java项目,并使用上面解释的方法添加了这个外部Jar文件。没有maven,没有tomcat,什么都没有。只是一个简单的主要方法。我运行了相同的代码,它工作正常。所以它必须与IntelliJ和一个或多个:

有关
  • 的Maven
  • Tomcat(部署战争文件)
  • Maven和Tomcat?

编辑:当我只添加外部Jar 并尝试从com.mysql.jdbc导入类时...... IntelliJ IDEA没有出现任何警告/错误。它找到了类,但是在部署之后,似乎无法再找到类了。

1 个答案:

答案 0 :(得分:4)

部署webapp并在tomcat上运行。 Tomcat不关心IntelliJ源项目中的jar。对tomcat最重要的是已部署的webapp的WEB-INF / lib目录下的jar文件集。只有那些罐子在webapp的类路径中。

我不太清楚IntelliJ如何构建和部署webapps,尤其是当Maven在图片中时。但我猜它只部署了Maven项目的编译和运行时范围内的jar。对于外部jar,可能可以配置IntelliJ项目,以便将其包含在构建和部署的存档中。

但无论如何,如果你使用Maven,你必须能够在不使用IntelliJ的情况下建立你的战争。这就是构建工具的重点:它用于构建没有IDE的项目。因此Maven必须知道所有必要的罐子。因此,如果Maven中心没有提供的罐子,应该添加到您自己的本地Maven仓库(至少),或者添加到贵公司的私人仓库。