1.一般情况下jar包都可以使用pom.xml来配置管理,但也有一些时候,我们项目中使用了一个内部jar文件,但是这个文件我们又没有开放到maven库中。 我们会将文件放到我们项目中。(以下以java工程为例随便放了个地方):

2. jar包的引入和使用:

右键项目 -> Build Path -> Configure Build Path ->Libraries ->Add External JARS 

这时候我们就可以在工程里使用jar包了 

package com.my.utils;

import com.my.util.Book;

public class Test {

    public static void main(String[] args) {
// TODO Auto-generated method stub.
Book book =new Book("English", 12.5);
System.out.println(book);
} }

但是如果我们不对pom.xml进行特殊配置的话,maven打包是不会自动去引用和编译lib中的jar文件的,会出现类似如下错误

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.3:compile (default-compile) on project utils: Compilation failure: Compilation failure:
[ERROR] /C:/Users/Administrator/git/utils/src/main/java/com/my/utils/Test.java:[3,19] 程序包com.my.util不存在
[ERROR] /C:/Users/Administrator/git/utils/src/main/java/com/my/utils/Test.java:[9,17] 找不到符号
[ERROR] 符号: 类 Book
[ERROR] 位置: 类 com.my.utils.Test
[ERROR] /C:/Users/Administrator/git/utils/src/main/java/com/my/utils/Test.java:[9,32] 找不到符号
[ERROR] 符号: 类 Book
[ERROR] 位置: 类 com.my.utils.Test

所以需要我们修改下pom.xml文件。修改maven-compiler-plugin的配置,如下:

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
<compilerArguments>
<extdirs>${project.basedir}/src/main/resources/lib</extdirs>
</compilerArguments>
</configuration>
</plugin>
</plugins>
</build>

3.如果是web项目,我们会将文件当到我们项目WEB-INF/lib中。

 修改maven-compiler-plugin的配置,如下:

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>UTF-8</encoding>
<compilerArguments>
<verbose />
<bootclasspath>${env.JAVA_HOME}/jre/lib/rt.jar</bootclasspath>
<extdirs>${project.basedir}/src/main/webapp/WEB-INF/lib</extdirs>
</compilerArguments>
</configuration>
</plugin>

其他配置是我的原来配置,针对lib引用这个问题,只需要增加的是:

<extdirs>${project.basedir}/src/main/webapp/WEB-INF/lib</extdirs>

不过在3.1版本以后maven-compiler-plugin将compilerArguments定为过时了,建议大家按下面的方法写。 
其中表示javac平时用空格隔开的的每一个参数。

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>UTF-8</encoding>
<compilerArgs>
<arg>-verbose</arg>
<arg>-Xlint:unchecked</arg>
<arg>-Xlint:deprecation</arg>
<arg>-bootclasspath</arg>
<arg>${env.JAVA_HOME}/jre/lib/rt.jar</arg>
<arg>-extdirs</arg>
<arg>${project.basedir}/src/main/webapp/WEB-INF/lib</arg>
</compilerArgs>
</configuration>
</plugin>

其中${project.basedir}一定要写,不然会出现“在windows”下可以正常编译,在Linux服务器上就“有可能”出现编译找不到jar包的错误。

另外科普一下,maven的目录约定: 
pom.xml所在的目录应为项目的根目录,假设该目录为${proj-dir},那么Maven有以下假设:

${proj-dir}/src/main/java —— 存放项目的.java文件。

${proj-dir}/src/main/resources —— 存放项目资源文件,如spring, hibernate配置文件。

${proj-dir}/src/test/jave —— 存放所有测试.java文件,如JUnit测试类。

${proj-dir}/src/test/resources —— 测试资源文件。

${proj-dir}/target —— 项目输出位置。

运行一条mvn clean package命令,Maven会帮你清除target目录,重新建一个空的,编译src/main/java类至target/classes,复制src/main/resources的文件至target/classes,编译src/test/java至target/test-classes,复制src/test/resources的文件至target/test-classes;然后运行所有测试;测试通过后,使用jar命令打包,存储于target目录。Maven做的事情一点也不少,只是都对用户隐蔽起来了,它只要求你遵循它的约定。

2018年8月25日 08:39:39

2019年6月21日 09:38:09

2020年4月24日 21:41:47

最新文章

  1. python 之禅
  2. 在SQL存储过程中给条件变量加上单引号
  3. 短信SMS的接收
  4. C# WPF使用ZXing生成二维码ImageSource
  5. 疯狂java讲义——多态
  6. Linux -Yum 命令详解
  7. 基于局部敏感哈希的协同过滤算法之simHash算法
  8. [Castle Windsor]学习依赖注入
  9. !!Python字典增删操作技巧简述+Python字典嵌套字典与排序
  10. Android手机修改Hosts的方法
  11. 修改/home内子目录的名字
  12. 多平台Native库打入JAR包发布实战
  13. Java Socket获取本机的InetAddress实例
  14. 使用第三方jar时出现的问题
  15. 【竞价网站绝技】根据访客ip,页面显示访客所属城市的html代码(借用YY IP地址库)
  16. 书城项目第五阶段---book表的curd
  17. scala下划线
  18. ubuntu18.04系统下用devstack安装openstack(最新版)
  19. spring boot 连接mysql mongodb with jpa
  20. bzoj3997

热门文章

  1. org.apache.hadoop.security.AccessControlException: org.apache.hadoop.security .AccessControlException: Permission denied: user=Administrator, access=WRITE, inode=&quot;hadoop&quot;: hadoop:supergroup:rwxr-xr-x
  2. [转]ASP.NET Core 十种方式扩展你的 Views
  3. 【优化】Filddler用于移动端
  4. SpringMVC路径匹配规则AntPathMatcher
  5. sklearn 绘制roc曲线
  6. 业务ID 生成规则
  7. kmean算法C++实现
  8. Nodejs学习笔记(六)—Node.js + Express 构建网站预备知识
  9. 笔记三:python乱码深度剖析一
  10. spark集群构建