很顯然,這種方法是很不可取的,由於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