Maven使用本地jar包並打包進war包裏面的方法

很顯然,這種方法是很不可取的,由於Maven是用來團隊合做,以及發佈開源代碼的。而使用本地jar包,則使得Maven喪失了這部分的優勢。不 過,我遇到的問題是,我想學習Maven,而後我之前的項目,公司的項目都不是用Maven的。而後我想引用其中的一些jar包,特別是某些項目 build以後在dist文件夾下的包。因此,纔想出了下面的法子。 java


我先在個人Maven項目下創建一個lib文件夾,把我要用到的jar包都放到裏面去。而後在pom.xml裏添加以下的內容: web

<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包路徑。這裏不知道可否批量導入,沒測試過,不過貌似不能夠。 apache

可是,還有個麻煩問題,我把個人項目打包成war包的時候,它竟然只有我寫的代碼,而不包括引用的jar包。這就很麻煩了,打包的war包就不能直接使用了。找來很久,終於找到緣由了。首先是其餘正常使用maven的包,以下: api

<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這句給刪除掉就能夠了。 maven

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

<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爲後綴的文件 ui

經過上面的設置,就能把你要的jar包導入進去了 code

相關文章
相關標籤/搜索