簡體   English   中英

將第三方庫與Maven構建集成

[英]Integrating 3rd party libraries with Maven build

我們目前正在使用Maven構建我們的Android應用。 我們還擁有自己的內部Maven服務器,用於存儲最終應用程序所基於的內部構件。

我們想集成一些要使用的外部(第三方)庫,但是這些庫不會導出到任何Maven存儲庫(MoPub和Chartboost)。

這兩個庫都以.jar形式提供,我如何(或應該)將它們包括在我們的構建過程中?

我想到了2個選擇:

  1. 將.jar直接包含在我們的VCS中。
  2. 將.jars發布到我們的內部Maven服務器,並將其用作依賴項。

我不是Maven專家,我也不知道#1甚至是可能的,或者這些選項哪個更好(為什么)

它認為您最好的選擇是與第三方軟件的開發人員聯系,並詢問他們是否可以使用Maven存儲庫? 如果沒有,您可以要求他們創建一個。 否則,您可以將它們托管在自己的存儲庫中,這比將它們放入VCS更可取,因為這應該保留給源代碼,而不是編譯資源。

首先,考慮將.jar文件存儲在您的VCS中很好,但是我會完全將其關閉。 對於第三方代碼,最好將其包含在構建系統中,但應將其作為單獨的構建執行,例如“第三方”構建或類似的東西。 構建本身應該編譯Java代碼,然后將其發布到內部Maven服務器。 如果第三方代碼不使用Maven或Gradle或類似的東西(或者它甚至可能不是用Java編寫的),那么您可以使用ant'ant-maven-tasks'庫進行發布。 下面是一個示例:

<path id="maven-ant-tasks.classpath" path="lib/maven-ant-tasks-2.1.3.jar" />

<typedef resource="org/apache/maven/artifact/ant/antlib.xml"
       uri="antlib:org.apache.maven.artifact.ant"
       classpathref="maven-ant-tasks.classpath" />

<target name="-after-build">
    <echo message="Building web jar..."/>
    <property name="output.jar.file" value="${buildbase.dir}/${app.name}-web.jar"/>
    <jar destfile="${output.jar.file}"
         basedir="${buildwebapp.dir}"
     />
     <!-- Look at using this when 'http://jira.codehaus.org/browse/MANTTASKS-170' is fixed 
          Alternatively, use the write around in this link if dynamic versioning is needed -->
     <!-- 
    <artifact:pom id="QuizEditorPOM" groupId="com.quiztailor" artifactId="QuizEditor"
                  version="1.0-SNAPSHOT" packaging="jar">
    </artifact:pom>
    -->

    <artifact:pom id="QuizEditorPOM" file="pom.xml" />

    <artifact:install file="${output.jar.file}" pomRefid="QuizEditorPOM"/>
</target>

也請留意該評論,因為還有一種替代(IMHO)更好的方法,仍使用行家ant任務,但是此方法目前存在一個錯誤(jira票MANTTASKS-170)。 但是不要害怕,因為“有效”的方法可以解決問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM