将第三方库与Maven构建集成

时间:2014-03-09 13:46:01

标签: java android maven build dependencies

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

我们希望集成一些外部(第三方)库,但这些库不会导出到任何maven存储库(MoPub和Chartboost)。

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

我想到了两个选项:

  1. 将.jar直接包含在我们的VCS中。
  2. 将.jars发布到我们的内部maven服务器,并将它们用作依赖项。
  3. 我不是Maven专家,我不知道#1是否可能,或者哪些选项更好(以及为什么)

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

首先,很高兴考虑将.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>

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