zoukankan      html  css  js  c++  java
  • 7.如何在Maven项目中引入自己的jar包

     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

  • 相关阅读:
    IE8 "开发人员工具" 无法使用,无法显示
    Python中用OpenPyXL处理Excel表格
    calendar函数使用说明【转】
    python之fabric2.0模块学习
    Day9
    Day8
    深入super,看Python如何解决钻石继承难题——转自楚门蔡的测视界
    python/socket编程之粘包
    os模块关于目录
    Day7
  • 原文地址:https://www.cnblogs.com/lukelook/p/8673778.html
Copyright © 2011-2022 走看看