maven 引用自己的jar

https://www.cnblogs.com/lukelook/p/8673778.html

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

  1. 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的配置,如下:

复制代码



org.apache.maven.plugins
maven-compiler-plugin
3.3

1.8
1.8
UTF-8

${project.basedir}/src/main/resources/lib





复制代码

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

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

复制代码

org.apache.maven.plugins
maven-compiler-plugin
3.1

1.7
1.7
UTF-8


e n v . J A V A H O M E / j r e / l i b / r t . j a r &lt; / b o o t c l a s s p a t h &gt; &lt; e x t d i r s &gt; {env.JAVA_HOME}/jre/lib/rt.jar&lt;/bootclasspath&gt; &lt;extdirs&gt; env.JAVAHOME/jre/lib/rt.jar</bootclasspath><extdirs>{project.basedir}/src/main/webapp/WEB-INF/lib



复制代码

其他配置是我的原来配置,针对lib引用这个问题,只需要增加的是:
${project.basedir}/src/main/webapp/WEB-INF/lib

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

复制代码

org.apache.maven.plugins
maven-compiler-plugin
3.1

1.7
1.7
UTF-8

-verbose
-Xlint:unchecked
-Xlint:deprecation
-bootclasspath
e n v . J A V A H O M E / j r e / l i b / r t . j a r &lt; / a r g &gt; &lt; a r g &gt; − e x t d i r s &lt; / a r g &gt; &lt; a r g &gt; {env.JAVA_HOME}/jre/lib/rt.jar&lt;/arg&gt; &lt;arg&gt;-extdirs&lt;/arg&gt; &lt;arg&gt; env.JAVAHOME/jre/lib/rt.jar</arg><arg>extdirs</arg><arg>{project.basedir}/src/main/webapp/WEB-INF/lib



复制代码
其中${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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值