如何将商业第三方文物整合到您的Maven版本中
根據(jù)ZeroTurnaround的RebelLabs最近進(jìn)行的一項(xiàng)調(diào)查 ,Maven仍然是領(lǐng)先的Java構(gòu)建平臺(tái)。 根據(jù)RebelLabs,當(dāng)前的市場(chǎng)份額分布是:
- Maven的64%
- 螞蟻+常春藤與16.5%
- 搖籃與11%
但是,與此同時(shí),Maven經(jīng)常因其晦澀和干擾性而受到批評(píng)。 與亞軍Ant和Gradle相比,Maven在解釋和自定義適應(yīng)構(gòu)建模型方面僅具有很小的靈活性。 就像Data Stax的Tim Berglund所說的那樣:
但是,讓我們開個(gè)玩笑,看看一個(gè)現(xiàn)實(shí)世界中的問題:
整合第三方商業(yè)物品
Maven Central并非免費(fèi)提供您要依賴的所有第三方人工制品。 商業(yè)JDBC驅(qū)動(dòng)程序或商業(yè)jOOQ版本就是這樣的例子。 從本質(zhì)上講,有三種方法可以將這些偽像集成到您的構(gòu)建中:
快速而骯臟
通常,對(duì)于小型測(cè)試項(xiàng)目或演示,您僅需要商業(yè)依賴。 您想確保它在運(yùn)行時(shí)可以正常運(yùn)行,而不必依賴于本地存儲(chǔ)庫(kù)設(shè)置或網(wǎng)絡(luò)連接。 這是<scope>system</scope>的好用例:
例如:jOOQ
<dependency><groupId>org.jooq</groupId><artifactId>jooq</artifactId><version>${jooq.version}</version><scope>system</scope><systemPath>${basedir}/lib/jooq-${jooq.version}.jar</systemPath> </dependency>例如:Microsoft SQL JDBC
<dependency><groupId>com.microsoft.sqlserver</groupId><artifactId>sqljdbc4</artifactId><version>3.0</version><scope>system</scope><systemPath>${basedir}/lib/sqljdbc4.jar</systemPath><!-- Notice that we can still put "optional"on commercial JDBC driver dependencies --><optional>true</optional> </dependency>這種方法的優(yōu)點(diǎn)
當(dāng)您要擁有一個(gè)本地的,自包含的模塊,該模塊可以保證在從源代碼管理中檢出后立即運(yùn)行,而無需其他配置和設(shè)置,這確實(shí)是一個(gè)非常簡(jiǎn)單的解決方案。 當(dāng)然,不要忘記先將庫(kù)簽入源代碼管理。
這種方法的缺點(diǎn)
系統(tǒng)依賴項(xiàng)永遠(yuǎn)不會(huì)傳遞。 如果您的模塊以這種方式依賴jOOQ,則模塊的依賴項(xiàng)將看不到j(luò)OOQ API。
有關(guān)系統(tǒng)依賴性的詳細(xì)信息,請(qǐng)參見Maven文檔 。 從文檔中引用:
與作用域系統(tǒng)的依賴關(guān)系始終可用,不會(huì)在存儲(chǔ)庫(kù)中查找。 它們通常用于告知Maven JDK或VM提供的依賴項(xiàng)。 因此,系統(tǒng)依賴關(guān)系對(duì)于解決JDK現(xiàn)在提供的工件的依賴關(guān)系特別有用,但以前可以單獨(dú)下載獲得。 典型示例是JDBC標(biāo)準(zhǔn)擴(kuò)展或Java身份驗(yàn)證和授權(quán)服務(wù)(JAAS)。
更加堅(jiān)固
一種看起來更健壯的方法是從版本控制系統(tǒng)中檢查依賴項(xiàng),然后“手動(dòng)”將其導(dǎo)入本地存儲(chǔ)庫(kù)。 這將使它們可用于您自己的本地版本。 以下shell腳本顯示了如何將jOOQ工件導(dǎo)入到本地存儲(chǔ)庫(kù)中
Windows批處理
@echo off set VERSION=3.4.4if exist jOOQ-javadoc\jooq-%VERSION%-javadoc.jar (set JAVADOC_JOOQ=-Djavadoc=jOOQ-javadoc\jooq-%VERSION%-javadoc.jarset JAVADOC_JOOQ_META=-Djavadoc=jOOQ-javadoc\jooq-meta-%VERSION%-javadoc.jarset JAVADOC_JOOQ_CODEGEN=-Djavadoc=jOOQ-javadoc\jooq-codegen-%VERSION%-javadoc.jarset JAVADOC_JOOQ_CODEGEN_MAVEN=-Djavadoc=jOOQ-javadoc\jooq-codegen-maven-%VERSION%-javadoc.jarset JAVADOC_JOOQ_SCALA=-Djavadoc=jOOQ-javadoc\jooq-scala-%VERSION%-javadoc.jar )if exist jOOQ-src\jooq-%VERSION%-sources.jar (set SOURCES_JOOQ=-Dsources=jOOQ-src\jooq-%VERSION%-sources.jarset SOURCES_JOOQ_META=-Dsources=jOOQ-src\jooq-meta-%VERSION%-sources.jarset SOURCES_JOOQ_CODEGEN=-Dsources=jOOQ-src\jooq-codegen-%VERSION%-sources.jarset SOURCES_JOOQ_CODEGEN_MAVEN=-Dsources=jOOQ-src\jooq-codegen-maven-%VERSION%-sources.jarset SOURCES_JOOQ_SCALA=-Dsources=jOOQ-src\jooq-scala-%VERSION%-sources.jar )call mvn install:install-file -Dfile=jOOQ-pom\pom.xml -DgroupId=org.jooq -DartifactId=jooq-parent -Dversion=%VERSION% -Dpackaging=pom call mvn install:install-file -Dfile=jOOQ-lib\jooq-%VERSION%.jar -DgroupId=org.jooq -DartifactId=jooq -Dversion=%VERSION% -Dpackaging=jar %JAVADOC_JOOQ% %SOURCES_JOOQ% -DpomFile=jOOQ-pom\jooq\pom.xml call mvn install:install-file -Dfile=jOOQ-lib\jooq-meta-%VERSION%.jar -DgroupId=org.jooq -DartifactId=jooq-meta -Dversion=%VERSION% -Dpackaging=jar %JAVADOC_JOOQ_META% %SOURCES_JOOQ_META% -DpomFile=jOOQ-pom\jooq-meta\pom.xml call mvn install:install-file -Dfile=jOOQ-lib\jooq-codegen-%VERSION%.jar -DgroupId=org.jooq -DartifactId=jooq-codegen -Dversion=%VERSION% -Dpackaging=jar %JAVADOC_JOOQ_CODEGEN% %SOURCES_JOOQ_CODEGEN% -DpomFile=jOOQ-pom\jooq-codegen\pom.xml call mvn install:install-file -Dfile=jOOQ-lib\jooq-codegen-maven-%VERSION%.jar -DgroupId=org.jooq -DartifactId=jooq-codegen-maven -Dversion=%VERSION% -Dpackaging=jar %JAVADOC_JOOQ_CODEGEN_MAVEN% %SOURCES_JOOQ_CODEGEN_META% -DpomFile=jOOQ-pom\jooq-codegen-maven\pom.xml call mvn install:install-file -Dfile=jOOQ-lib\jooq-scala-%VERSION%.jar -DgroupId=org.jooq -DartifactId=jooq-scala -Dversion=%VERSION% -Dpackaging=jar %JAVADOC_JOOQ_SCALA% %SOURCES_JOOQ_SCALA% -DpomFile=jOOQ-pom\jooq-scala\pom.xmlLinux Shell
#!/bin/sh VERSION=3.4.4if [ -f jOOQ-javadoc/jooq-$VERSION-javadoc.jar ]; thenJAVADOC_JOOQ=-Djavadoc=jOOQ-javadoc/jooq-$VERSION-javadoc.jarJAVADOC_JOOQ_META=-Djavadoc=jOOQ-javadoc/jooq-meta-$VERSION-javadoc.jarJAVADOC_JOOQ_CODEGEN=-Djavadoc=jOOQ-javadoc/jooq-codegen-$VERSION-javadoc.jarJAVADOC_JOOQ_CODEGEN_MAVEN=-Djavadoc=jOOQ-javadoc/jooq-codegen-maven-$VERSION-javadoc.jarJAVADOC_JOOQ_SCALA=-Djavadoc=jOOQ-javadoc/jooq-scala-$VERSION-javadoc.jar fiif [ -f jOOQ-src/jooq-$VERSION-sources.jar ]; thenSOURCES_JOOQ=-Dsources=jOOQ-src/jooq-$VERSION-sources.jarSOURCES_JOOQ_META=-Dsources=jOOQ-src/jooq-meta-$VERSION-sources.jarSOURCES_JOOQ_CODEGEN=-Dsources=jOOQ-src/jooq-codegen-$VERSION-sources.jarSOURCES_JOOQ_CODEGEN_MAVEN=-Dsources=jOOQ-src/jooq-codegen-maven-$VERSION-sources.jarSOURCES_JOOQ_SCALA=-Dsources=jOOQ-src/jooq-scala-$VERSION-sources.jar fimvn install:install-file -Dfile=jOOQ-pom/pom.xml -DgroupId=org.jooq -DartifactId=jooq-parent -Dversion=$VERSION -Dpackaging=pom mvn install:install-file -Dfile=jOOQ-lib/jooq-$VERSION.jar -DgroupId=org.jooq -DartifactId=jooq -Dversion=$VERSION -Dpackaging=jar $JAVADOC_JOOQ $SOURCES_JOOQ -DpomFile=jOOQ-pom/jooq/pom.xml mvn install:install-file -Dfile=jOOQ-lib/jooq-meta-$VERSION.jar -DgroupId=org.jooq -DartifactId=jooq-meta -Dversion=$VERSION -Dpackaging=jar $JAVADOC_JOOQ_META $SOURCES_JOOQ_META -DpomFile=jOOQ-pom/jooq-meta/pom.xml mvn install:install-file -Dfile=jOOQ-lib/jooq-codegen-$VERSION.jar -DgroupId=org.jooq -DartifactId=jooq-codegen -Dversion=$VERSION -Dpackaging=jar $JAVADOC_JOOQ_CODEGEN $SOURCES_JOOQ_CODEGEN -DpomFile=jOOQ-pom/jooq-codegen/pom.xml mvn install:install-file -Dfile=jOOQ-lib/jooq-codegen-maven-$VERSION.jar -DgroupId=org.jooq -DartifactId=jooq-codegen-maven -Dversion=$VERSION -Dpackaging=jar $JAVADOC_JOOQ_CODEGEN_MAVEN $SOURCES_JOOQ_CODEGEN_META -DpomFile=jOOQ-pom/jooq-codegen-maven/pom.xml mvn install:install-file -Dfile=jOOQ-lib/jooq-scala-$VERSION.jar -DgroupId=org.jooq -DartifactId=jooq-scala -Dversion=$VERSION -Dpackaging=jar $JAVADOC_JOOQ_SCALA $SOURCES_JOOQ_SCALA -DpomFile=jOOQ-pom/jooq-scala/pom.xml上面的腳本實(shí)際上檢查發(fā)行版中是否有Javadoc,Sources和/或Binaries,然后安裝:
- 父pom.xml
- 各種工件二進(jìn)制文件,源文件,javadocs和pom.xml文件
這種方法的優(yōu)點(diǎn)
現(xiàn)在可以像引用任何其他類型的依賴項(xiàng)一樣引用依賴項(xiàng),因?yàn)槿斯ぶ破芬言诒镜卮鎯?chǔ)庫(kù)中注冊(cè)。 而且,它們還可以傳遞給模塊自己的依賴項(xiàng),這些依賴關(guān)系可以傳遞-這可能是您在使用jOOQ時(shí)想要的。 然后,您將指定相關(guān)性:
<dependency><groupId>org.jooq</groupId><artifactId>jooq</artifactId><version>${jooq.version}</version> </dependency><dependency><groupId>com.microsoft.sqlserver</groupId><artifactId>sqljdbc4</artifactId><version>3.0</version><scope>provided</scope> </dependency>這種方法的缺點(diǎn)
依賴項(xiàng)的安裝涉及一個(gè)手動(dòng)步驟。 如果您沒有上述腳本,那么準(zhǔn)確地找出如何逐步將所有這些依賴項(xiàng)導(dǎo)入到存儲(chǔ)庫(kù)中可能會(huì)很繁瑣。 特別是,如果您正在運(yùn)行演示或原型,則可能在最壞的情況下導(dǎo)致意外的編譯失敗。
要走的路
顯然,在實(shí)際的項(xiàng)目設(shè)置中,以上兩種方法都不足夠,并且您可能會(huì)將這些庫(kù)導(dǎo)入本地Nexus或Bintray或使用的任何存儲(chǔ)庫(kù)中。 只是要注意商業(yè)交付物可能對(duì)分銷的潛在限制。
在此處可以找到有關(guān)如何將人工制品安裝到Nexus的小教程 。
翻譯自: https://www.javacodegeeks.com/2014/12/how-to-integrate-commercial-third-party-artefacts-into-your-maven-build.html
總結(jié)
以上是生活随笔為你收集整理的如何将商业第三方文物整合到您的Maven版本中的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 蔚来想通了一半
- 下一篇: 诺基亚n82上市时间(诺基亚新N82)