Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将第三方库与Maven build集成_Java_Android_Maven_Build_Dependencies - Fatal编程技术网

Java 将第三方库与Maven build集成

Java 将第三方库与Maven build集成,java,android,maven,build,dependencies,Java,Android,Maven,Build,Dependencies,我们的Android应用程序目前正在使用Maven构建。我们也有自己的内部Maven服务器,它存储最终应用程序构建的内部构件 我们希望集成一些要使用的外部(第三方)库,但是这些库不会导出到任何maven存储库(MoPub和Chartboost) 这两个库都是以.jar的形式提供的,我如何(或者应该)将它们包含到我们的构建过程中 我想到了两个选择: 将.jar直接包含在我们的VCS中 将.jar发布到我们的内部maven服务器,并将其用作依赖项 我不是专家,我不知道#1是否可能,或者这些选项中的哪

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

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

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

我想到了两个选择:

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

  • 我不是专家,我不知道#1是否可能,或者这些选项中的哪一个更好(以及原因)

    首先,考虑将.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),仍然使用maven ant任务,但目前该方法存在一个bug(jira tasks-170)。但是,不要害怕,因为“工作”方法可以很好地发挥作用。

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

    您使用的是哪些库?它们是否存在于maven central中?不,它们不存在于search.maven.org repo中(如问题中所述)安装一个存储库管理器,一切正常。还有一件事。确保将第三方来源存储在VCS中。另外,如果您的构建系统中没有包含它,那么您肯定应该包含一个readme.txt来解释如何构建它,并明确记录任何特殊标志或构建选项。我见过许多项目由于人们忘记了重建而无法准确重建:)