7.如何在Maven项目中引入本身的jar包

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

 2. jar包的引入和使用:java

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

 

这时候咱们就能够在工程里使用jar包了 web

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文件的,会出现相似以下错误spring

 

[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的配置,以下: apache

<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中。windows

 

 修改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引用这个问题,只须要增长的是: app

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

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

<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

相关文章
相关标签/搜索