在試驗/快速而骯髒的開發階段,Maven2讓我發瘋。 python
我有一個pom.xml
文件,該文件定義了要使用的Web應用程序框架的依賴項,而且能夠從該文件快速生成啓動程序項目。 可是,有時我想連接到還沒有定義pom.xml
文件的第三方庫,所以,不是手動爲第三方庫建立pom.xml
文件並安裝它,而後將依賴項添加到個人pom.xml
,我想告訴Maven:「除了定義的依賴項以外,還包括/lib
全部jar。」 apache
看起來這應該很簡單,可是若是是這樣,我就缺乏了一些東西。 框架
任何有關如何執行此操做的指針將不勝感激。 簡而言之,若是有一種簡單的方法將maven指向/lib
目錄並輕鬆建立pom.xml
並將全部封閉的jar映射到單個依賴項,而後我能夠命名/安裝並連接到一個依賴項中,也足夠。 maven
您能夠在項目上建立本地存儲庫 ide
例如,若是項目結構中有libs
文件夾 ui
在libs
文件夾中,您應該建立目錄結構,例如: /groupId/artifactId/version/artifactId-version.jar
url
在pom.xml中,您應該註冊存儲庫 spa
<repository> <id>ProjectRepo</id> <name>ProjectRepo</name> <url>file://${project.basedir}/libs</url> </repository>
並像往常同樣添加依賴項 .net
<dependency> <groupId>groupId</groupId> <artifactId>artifactId</artifactId> <version>version</version> </dependency>
就這些。 指針
有關詳細信息: 如何在Maven中添加外部庫
在與CloudBees的專家進行了很長時間的討論以後,他們討論瞭如何正確地包裝此類JAR,而後提出了一個有趣的好方案:
建立一個僞造的Maven項目,該項目將先前存在的JAR附加爲主要工件,並運行到所屬的POM install:install-file執行中。 這是這種POM的示例:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-install-plugin</artifactId> <version>2.3.1</version> <executions> <execution> <id>image-util-id</id> <phase>install</phase> <goals> <goal>install-file</goal> </goals> <configuration> <file>${basedir}/file-you-want-to-include.jar</file> <groupId>${project.groupId}</groupId> <artifactId>${project.artifactId}</artifactId> <version>${project.version}</version> <packaging>jar</packaging> </configuration> </execution> </executions> </plugin> </plugins> </build>
可是爲了實現它,應該改變現有的項目結構。 首先,您應該記住,對於每種此類JAR,都應建立不一樣的假Maven項目(模塊)。 而且應該建立一個父Maven項目,其中包括全部子模塊:全部JAR包裝器和現有的主項目。 結構能夠是:
XML element) (POM packaging) 根項目(此文件包含父POM文件,其中包括帶有 XML元素的全部子模塊)(POM打包)
JAR 1包裝Maven子項目(POM包裝)
JAR 2包裝Maven子項目(POM包裝)
現有的主要Maven子項目(WAR,JAR,EAR ....包裝)
當經過mvn:install或mvn:packaging運行父級時,將執行子模塊。 這多是一個負號,由於項目結構應該更改,可是最後提供了一個非靜態的解決方案
使用<scope>system</scope>
是一個糟糕的主意,其緣由已由其餘人解釋,手動將文件安裝到本地存儲庫會使構建沒法複製,並使用<url>file://${project.basedir}/repo</url>
也不是一個好主意,由於(1)可能不是格式正確的file
URL(例如,若是項目在帶有不尋常字符的目錄中檢出),(2)若是該項目的POM不能使用結果用做其餘人項目的依賴項。
假設您不肯意將工件上傳到公共存儲庫,Simeon建議使用幫助程序模塊來完成這項工做。 可是如今有一種更簡單的方法…
使用non-maven-jar-maven-plugin 。 確實知足您的要求,而沒有其餘方法的缺點。
我找到了另外一種方法,請參見Heroku文章
總結(對一些複製和粘貼感到抱歉)
repo
目錄: yourproject +- pom.xml +- src +- repo
mvn deploy:deploy-file -Durl=file:///path/to/yourproject/repo/ -Dfile=mylib-1.0.jar -DgroupId=com.example -DartifactId=mylib -Dpackaging=jar -Dversion=1.0
pom.xml
: <repositories> <!--other repositories if any--> <repository> <id>project.local</id> <name>project</name> <url>file:${project.basedir}/repo</url> </repository> </repositories> <dependency> <groupId>com.example</groupId> <artifactId>mylib</artifactId> <version>1.0</version> </dependency>
我在@alex lehmann's的答案註釋中提到了一些python代碼,所以請將其發佈在此處。
def AddJars(jarList): s1 = '' for elem in jarList: s1+= """ <dependency> <groupId>local.dummy</groupId> <artifactId>%s</artifactId> <version>0.0.1</version> <scope>system</scope> <systemPath>${project.basedir}/manual_jars/%s</systemPath> </dependency>\n"""%(elem, elem) return s1