IDEA使用Maven项目不能加入本地Jar包的解决方法

27 篇文章 0 订阅
3 篇文章 0 订阅

使用IDEA编辑Web项目已经逐渐超过了使用eclipse的人数,但是IDEA对于pom.xml的执行也就是Maven方式导包支持并不是很完善,简单来说就是pom.xml上面记录的依赖库一般都能导入,但是如果pom.xml上面的某个依赖库失效,比如远程服务器关闭或者网络不通,或者是你想要加入本地硬盘上的某个jar包而不修改pom.xml的时候,IDEA的弊端就会显现出来。主要表现就是无法获得的依赖库或者本地Jar包无法放到/WEB-INF/lib目录下,导致Web项目部署时报错。

一个常见的错误就是ojdbc8,也就是连接Oracle数据库12c所需的最新的jdbc驱动包,这个在maven网站上是可以搜索到的,如下http://mvnrepository.com/artifact/com.github.noraui/ojdbc8/12.2.0.1

给出的依赖库网络路径为

<!-- https://mvnrepository.com/artifact/com.github.noraui/ojdbc8 -->
<dependency>
    <groupId>com.github.noraui</groupId>
    <artifactId>ojdbc8</artifactId>
    <version>12.2.0.1</version>
</dependency>

然而这个路径在2015年还有效,在2018年已经连接不上了(目前唯一还有效的是ojdbc for java 1.4的版本,2015年,无法支持oracle 10g及以后的数据库),如果你在maven里这样配置,那么IDEA的models里就会告诉你找不到该依赖库,当然你的WEB-INF里面也就不会有jdbc的jar包,你的应用当然就连接不了数据库了

IDEA会贴心的在相关maven依赖库下面加波浪线,并且把无法加载的资源用红色表示。

如果此时我们手动向Libraries里面加入本地的Jar包可不可以呢?

能加当然是能加进去,不过根据我多次的反复实验发现,你加入到Project Structure里面的Models或者Libraries里面之后,编写代码的时候是可以找到依赖的,但是在打war包的时候还是不会把ojdbc加入进去的,所以还是没能达到我们想要的效果。这主要是因为IDEA只会把pom.xml里面记录的jar包放入到WEB-INF,而不会理睬你其他方式加入的jar包。所以我们最后还得从maven入手。

此时我们就需要在上图出现问题的地方找到标红色的Classes下面的路径,通过手动点击来修改成本地jar包的位置,并且应该变为绿色,如下

 这样IDEA就不会把这个maven源报错了,同时pom.xml并没有被修改,只是项目目录下.idea目录下的某个.iml被修改了,这个修改要好好保留,因为不知道什么时候你一编译就又会按照pom.xml再给你改回来。如果需要长期不让它报错,可以使用cmd命令把本地的jar包加入到本地maven库中,命令如下:(把当前目录下的ojdbc8.jar按照上面的pom.xml中的配置加入到本地maven源,详请:)

mvn install:install-file -Dfile=ojdbc8.jar -DgroupId=com.github.noraui -DartifactId=ojdbc8  -Dversion=12.2.0.1 -Dpackaging=jar

另外如果不把maven里面自己设置的jar包输出到web根目录lib文件夹的话,那么打出来的war包或者是放在tomcat里跑还是会在启动的时候报错,如下就是使用了HttpClient也在maven里加入了HttpClient的依赖,但是启动tomcat仍然报错找不到类,此时你需要按照tomcat的一贯套路把相关jar包放到web根目录的lib目录下

此时还是进入Project Structure,在左侧找到Artifacts,然后找到WEB-INF,新建一个lib目录,然后点击加号把相关的库引入

加完之后

只有这样,打出来的war包的WEB根目录下才会有lib文件夹和里面的相关依赖jar包

如果你发现修改了这里还没有把自定义的jar包打包到WEB-INF下面(只是在代码窗口里不报错了),一个可能性是在编译过程中刚刚的修改又被pom.xml给覆盖了,另一个原因可能是你没有把编译结果输出到待发布目录,通过下面的方式可以修改。

后记:在没有使用maven框架的时候,java文件和包是可以直接放在src目录下的,但是引入maven之后,IDEA会自动帮你吧原来src下的包迁移到src/main/java下面,同时建立src/main/resources目录,这里面一般放我们的log4j配置文件log4j.properties。

在没有maven框架的时候,log4j.propertise应该放在src下面才能被自动识别,而加入maven框架之后应该放在src/main/resources下,否则log4j找不到默认配置文件

如下:在不使用maven框架时的目录结构,所有jar包都是放在项目根目录下

使用maven后的目录结构,没有jar包了,以pom.xml进行引入

另外还需要注意的一点就是,对于pom.xml里面和idea里面均有多出设置JDK版本的地方,最好统一,否则无法build成功,首先是pom.xml


<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
    <groupId>groupId</groupId>
    <artifactId>XDphone</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.51</version>
        </dependency>
       ......
 
    </dependencies>

</project>

然后是项目代码风格

然后是编译器版本在File-Settings里面

这样就能避免internal compiler error了

原文

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值