【问题标题】:Integrating 3rd party libraries with Maven build将 3rd 方库与 Maven 构建集成
【发布时间】:2014-04-12 12:58:49
【问题描述】:

我们的 Android 应用目前正在使用 Maven 构建。我们还有自己的内部 Maven 服务器,用于存储构建最终应用的内部构件。

我们想集成一些外部(第三方)库以供使用,但是这些库不会导出到任何 maven 存储库(MoPub 和 Chartboost)。

这两个库都以 .jar 形式提供,我如何(或应该)将它们包含到我们的构建过程中?

我想到了两个选择:

  1. 将 .jar 直接包含在我们的 VCS 中。
  2. 将 .jar 发布到我们的内部 maven 服务器,并将它们用作依赖项。

我不是 Maven 专家,我不知道 #1 是否可能,或者这些选项中哪个更好(以及为什么)

【问题讨论】:

  • 您使用的是哪些库?它们是否存在于 maven central search.maven.org
  • 不,它们不在 search.maven.org 存储库中(如问题所述)
  • 安装存储库管理器,一切正常。

标签: java android maven build dependencies


【解决方案1】:

它认为您最好的选择是联系第三方软件的开发人员并询问他们是否有您可以使用的 maven 存储库?如果没有,您可以要求他们创建一个。否则,您可以将它们托管在您自己的存储库中,这比将它们放在 VCS 中更可取,因为这应该保留给源代码,而不是编译资源。

【讨论】:

    【解决方案2】:

    首先,很高兴考虑将 .jar 文件存储在您的 VCS 中,但我会完全忽略它。对于第 3 方代码,最好将其包含在构建系统中,但让它作为单独的构建执行,例如“第 3 方”构建或类似的东西。 构建本身应该编译 Java 代码,然后将其发布到内部 maven 服务器。 如果第 3 方代码不使用 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>
    

    请注意那里的评论,因为还有另一种(恕我直言)更好的方法,仍在使用 maven ant 任务,但目前这种方法存在错误(jira ticket MANTTASKS-170)。但是不要害怕,因为“工作”方法可以解决问题。

    【讨论】:

    • 另一件事。确保将第 3 方源存储在 VCS 中。此外,如果您没有将它包含在构建系统中,那么您肯定应该包含一个 readme.txt 来解释如何构建它,并肯定记录任何特殊标志或构建选项。我见过许多由于人们忘记这样做而无法准确重建的项目:)
    猜你喜欢
    • 2016-01-02
    • 1970-01-01
    • 2017-01-10
    • 1970-01-01
    • 2019-03-25
    • 1970-01-01
    • 1970-01-01
    • 2015-02-24
    • 1970-01-01
    相关资源
    最近更新 更多