天天看點

Maven使用本地jar包并打包進war包裡面的方法

很顯然,這種方法是很不可取的,因為Maven是用來團隊合作,以及釋出開源代碼的。而使用本地jar包,則使得Maven喪失了這部分的優點。不過,我遇到的問題是,我想學習Maven,然後我以前的項目,公司的項目都不是用Maven的。然後我想引用其中的一些jar包,特别是某些項目build之後在dist檔案夾下的包。是以,才想出了下面的法子。

我先在我的Maven項目下建立一個lib檔案夾,把我要用到的jar包都放到裡面去。然後在pom.xml裡添加如下的内容:

<dependency>
<groupId>com.weiresearch</groupId>
<artifactId>webharvest</artifactId>
<version>1.0.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/webharvest.jar</systemPath>
</dependency>
           

這裡的groupId,artifactId,version都可以随便寫。然後scope要寫成system,systemPath就寫為要引用的jar包路徑。這裡不知道能否批量導入,沒測試過,不過貌似不可以。

但是,還有個麻煩問題,我把我的項目打包成war包的時候,它居然隻有我寫的代碼,而不包括引用的jar包。這就很麻煩了,打包的war包就不能直接使用了。找來好久,終于找到原因了。首先是其他正常使用maven的包,如下:

<dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.5</version>
        <scope>provided</scope>
  </dependency>
           

這裡引用的是servlet包,最重要的是scope這個字段,provided的意思,就是說這個jar包,在這個項目可能的運作環境裡,都會提供了的,是以就不用打包到war包裡面了。是以,要使得war包裡面包含servlet這個包,隻要把scope這句給删除掉就可以了。

而上面利用system這個scope引入的webharvest包,同樣也沒有引入進去。看了下網上的評論,才說最好不要用system這個scope。大概是說這個system指的是JDK裡面會包含這個jar包吧。這個解決方法就麻煩人了,最後是看到了這個問答才解決了的:Maven 2 assembly with dependencies: jar under scope “system” not included ,解決方法如下:

<plugin>
       <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-war-plugin</artifactId>
            <configuration>
                <webResources>
                    <resource>
                        <directory>${project.basedir}/lib</directory>
                        <targetPath>WEB-INF/lib</targetPath>
                        <filtering>true</filtering>
                        <includes>
                            <include>**/*.jar</include>
                        </includes>
                    </resource>
                </webResources>
            </configuration>
 </plugin>
           

directory字段指向的是包含你所有要用jar包的目錄

targetPath則是編譯後要把這些jar包複制到的位置

下面的filtering就是隻導入所有以jar為字尾的檔案

通過上面的設定,就能把你要的jar包導入進去了

本文出自: http://www.shahuwang.com , 原文位址: http://www.shahuwang.com/2013/09/04/maven%e4%bd%bf%e7%94%a8%e6%9c%ac%e5%9c%b0jar%e5%8c%85%e5%b9%b6%e6%89%93%e5%8c%85%e8%bf%9bwar%e5%8c%85%e9%87%8c%e9%9d%a2%e7%9a%84%e6%96%b9%e6%b3%95.html , 感謝原作者分享。

參考:http://outofmemory.cn/wr/?u=http%3A%2F%2Fwww.shahuwang.com%2F2013%2F09%2F04%2Fmaven%25e4%25bd%25bf%25e7%2594%25a8%25e6%259c%25ac%25e5%259c%25b0jar%25e5%258c%2585%25e5%25b9%25b6%25e6%2589%2593%25e5%258c%2585%25e8%25bf%259bwar%25e5%258c%2585%25e9%2587%258c%25e9%259d%25a2%25e7%259a%2584%25e6%2596%25b9%25e6%25b3%2595.html

摘自:http://ju.outofmemory.cn/entry/47641