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

使用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)

相关推荐

  • 如何在IDEA Maven项目中导入本地jar包的步骤

    1.打开侧面的maven,点击图中箭头指向的图标. 2.出现如下弹窗,在Command line在中输入执行的指令. 指令格式: install:install-file -Dfile=<Jar包的地址> -DgroupId=<Jar包的GroupId> -DartifactId=<Jar包的引用名称> -Dversion=<Jar包的版本> -Dpackaging=<Jar的打包方式> 如: mvn install:install-file -

  • 解决idea使用maven编译正常但是运行项目时却提示很多jar包找不到的问题

    如题,编译和打包都是正常的,pom文件中依赖存在并且没有报错.找到相应包的引用位置,也能正常访问包中的内容.而且提示的一般都是基础的jar包找不到,比如单元测试用到的jar包等... 情形一: 其他同事提交代码时把idea中的 .iml 文件也一起提交了,该文件中配置的jdk lib 路径与自己电脑中的该路径不一致. 解决方法很简单,执行一下 maven update 即可,也可以手动修改 .iml 文件中的该路径. 情形二: 排除情形一出现的原因,或使用情形一中的方法解决无效时,可以使用以下命

  • IDEA中创建maven项目引入相关依赖无法下载jar问题及解决方案

    先如今idea中的spring项目,springBoot的项目的开发一般都是基于maven创建的项目.这大大简化我我们对于各种依赖包的管理,同时又使得各种依赖包方便管理.但是当maven中的依赖下载出现问题的时候也是很头痛. 问题场景 在公司的项目中用到了fastjson依赖,而依赖的版本是动态获取的,如图 但是在某天启动项目的时候报错,一查看原来是maven中fastjson依赖的原因, 这时大部分的人的操作应该和我一样: 操作1 点击maven的更新按钮,让maven自动下载对应的jar包到

  • 解决IDEA中maven导入jar包一直报错问题

    查      看:   File------>Project Structure--------->Libraries如下面没有maven所引入的jar包则为该错误[1] 错误原因:  是导入的module错误,应该导入maven的module 解      决:  File------>Project Structure--------->Modules------------->选择中间项目---------->选择红色的减号(因为要重新导入module),保证现在

  • IDEA中已配置阿里镜像但maven无法下载jar包的问题及解决方法

    在网上拷贝的所有阿里云镜像比如: <mirror> <id>nexus-aliyun</id> <mirrorOf>central</mirrorOf> <name>Nexus aliyun</name> <url>http://maven.aliyun.com/nexus/content/groups/public</url> </mirror> 都不能解决我的问题,我的包里面一直出现

  • IDEA对使用了第三方依赖jar包的非Maven项目打jar包的问题(图文详解)

    前言: 最近,遇到了一个问题,都快把我整疯了:这个问题开始是由 使用IDEA 对 非Maven项目进行打 Jar 包 引起的:本来就是想简简单单的打个 jar 包,并将使用的第三方依赖 jar 包打进去,但是问题就出现在了项目中依赖的第三方 jar 包( bcprov-jdk15on-1.54.jar )存在签名,那在打包过程中会把 签名 破坏掉,导致在使用打好的jar包时报错: JCE cannot authenticate the provider BC . 注意:如果依赖的第三方jar包不

  • 详解IDEA中MAVEN项目打JAR包的简单方法

    Idea中为一般的非Web项目打Jar包是有自己的方法的,网上一搜就能查到很多. 但是如果是为Maven项目打Jar包,其实是很简单的,因为maven本身就有打Jar包的命令. 最简单的方法 首先是在maven项目的pom.xml中添加打包的插件,这里有很多种方式的.最最简单的就是只使用maven-compiler-plugin.maven-jar-plugin插件,并且指定程序入口<mainClass>.相关代码如下: pom.xml文件为: <?xml version="1

  • 解决idea导入maven项目缺少jar包的问题

    之前一直用的elipse,现在用idea不熟悉,这里记录一下.这里以idea2017为例. 导入elipse的maven项目,提示缺少jar包,肯定是idea没有给你导包. 第一步,首先确认自己的idea和maven的环境有没有配置好. 第二步,确认自己导项目时候的Module设置. 搞定自己的maven配置之后,咱们再来看一下项目的Module设置问题. 删掉之前Module,重新再导一遍. 点击 + 之后选择项目的本地路径,然后在弹出来的界面中选择Maven,之后一路 Next ,最后点击A

  • IDEA引MAVEN项目jar包依赖导入问题解决方法

    IDEA内置了Maven环境,默认采用Maven解决项目依赖问题.在新建项目后,项目的路径中会生成pom.xml文件和项目名.iml文件.新建项目后,IDEA不会自动刷新Maven的依赖.以Spring Application为例,新建项目编译时提示以下错误信息: 刷新Maven配置的方法为: (1)右键单击项目: (2)在弹出菜单中选择Maven|Reimport菜单项. 此时,IDEA将通过网络自动下载相关依赖,并存放在Maven的本地仓库中.另外,可以将Maven的刷新设置为自动,配置方法

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

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

  • 详解微信小程序「渲染层网络层错误」的解决方法

    问题描述: 情况是这样的,我需要在小程序中通过image标签显示三张我的图片,毫无疑问,其重点部分肯定在image的src属性上,请看思路分析: 我们可以新建一个专门放图片的文件夹,然后将我们项目所需要的图片文件全部放到这里.但是这会引发一个问题:微信官方对上线的小程序有大小的限制,所以如果你只是本地跑跑,那无可厚非,你开心就好:如果要做上线,这种方法的可行度不高: 使用外部链接.成功发布过小程序的小伙伴们都知道,外部链接必须使用https协议,且所使用域名必须设置在request合法域名列表中

  • Maven pom.xml 添加本地jar包依赖以及打包方法

    Maven项目打包时,如果遇到需要添加本地jar包依赖的时候,可以选择两种方法: 1. 安装到本地仓库 第一种方法比较常规,适用于需要添加的jar包也是由maven项目导出,含有pom文件的时候.只需要将jar包安装到本地maven仓库下,然后添加依赖即可. (1)安装到本地仓库,执行以下命令(其中的-Dfile/-DgroupId/-DartifactId/-Dversion项根据pom文件内容填写): mvn install:install-file -Dfile=xxxxx.jar -Dg

  • 详解eclipse创建maven项目实现动态web工程完整示例

    本文介绍了eclipse创建maven项目实现动态web工程完整示例,分享给大家.具体如下: 需求表均同springmvc案例 此处只是使用maven 注意,以下所有需要建立在你的eclipse等已经集成配置好了maven了,说白了就是新建项目的时候已经可以找到maven了 没有的话需要安装maven 1.新建maven项目,如果不在上面,请到other里面去找一下 2,进入maven项目之后,点击next 选择webapp之后 next 输入两个id package可以不写,是它默认帮你新建一

  • 详解如何使用maven生成可以执行的jar

    不依赖任何外界包,maven如何生成可以执行的jar? pom中不包含任何引用的情况下,只需要在pom中添加 maven-jar-plugin即可. 解决过程 新建项目,仅包含一个main函数类:Xixi.java,输出 Xixi Say: hello pom中配置为 <groupId>com.paxi</groupId> <artifactId>xixi</artifactId> <version>1.0-SNAPSHOT</versio

  • 详解Android Studio如何导入第三方类库、jar包和so库

    第三方类库源码 将一网友的XMPP代码从ADT转到AS时,发现其使用了第三方类库,源码放在了lib下,直接在AS中Import project,第三方类库并没有自动导入进来,看来需要自己动手了. 项目的目录结构如下: XMPP$ ls app build.gradle gradlew import-summary.txt XMPP.iml build gradle gradlew.bat local.properties settings.gradle 将第三方源码qqEmoji-lib拷到此目

  • maven引入本地jar包运行报错java.lang.NoClassDefFoundError解决

    目录 正文 maven引入本地jar的示例 配置maven将本地jar打入package中 maven打包知识分享 scope详解 正文 下文笔者讲述maven引入本地jar包时,运行报错"java.lang.NoClassDefFoundError"的处理方法分享,如下所示 今天在编写maven项目    导入本地jar包    部署到服务器上找不到包  报错信息如:java.lang.NoClassDefFoundError那么如何解决呢?   这种问题是由于,本地jar包在打包的

  • 详解IDEA2020新建spring项目和c3p0连接池的创建和使用

    目录 前言 1.环境准备:maven配置 2.导入jar包:c3p0-0.9.5.4.jar和mysql-connector-java.jar 3.编写测试类测试连接 前言 C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展,目前使用它的开源项目有Hibernate,Spring等. 1.环境准备:maven配置 打开idea,点击"+"新建项目,选择Spring,点击next,填写项目的名称,点击finish,新的Spring项

随机推荐