1. 程式人生 > >既使用maven編譯,又使用lib下的Jar包

既使用maven編譯,又使用lib下的Jar包

在專案開發中,專案用maven管理,是一個maven專案。
一般情況下jar包都可以使用pom.xml來配置管理,但也有一些時候,我們專案中使用了一個內部jar檔案,但是這個檔案我們又沒有開放到maven庫中。
我們會將檔案當到我們專案WEB-INF/lib中。
如果我們不對pom.xml進行特殊配置的話,maven打包是不會自動去引用和編譯lib中的jar檔案的,所以需要我們修改下pom.xml檔案。

修改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做的事情一點也不少,只是都對使用者隱蔽起來了,它只要求你遵循它的約定。

(完)