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

  • 相关阅读:
    Thinking in Java Reading Note(9.接口)
    Thinking in java Reading Note(8.多态)
    Thinking in Java Reading Note(7.复用类)
    SQL必知必会
    Thinking in Java Reading Note(5.初始化与清理)
    Thinking in Java Reading Note(2.一切都是对象)
    鸟哥的Linux私房菜笔记(1.基础)
    Thinking in Java Reading Note(1.对象导论)
    CoreJava2 Reading Note(2:I/O)
    CoreJava2 Reading Note(1:Stream)
  • 原文地址:https://www.cnblogs.com/lukelook/p/8673778.html
Copyright © 2011-2022 走看看