确保在Eclipse中进行SVN签出后立即构建Android项目的实践

时间:2013-06-22 00:32:25

标签: android eclipse svn maven buildpath

问题:

当项目被检入SVN,而其他人将其检出时,上面会出现一个感叹号,需要解决构建路径错误。如何解决?

作为一个例子,我有一个项目,以下是它的结构:

它在libs文件夹中有3个库:

* android-support-v4.jar
* bugsense3.2.2.jar
* gcm.jar

Android Dependencies文件夹包含:

* annotations.jar

参考图书馆有:

* gcm.jar

Android私人图书馆有:

* bugsense3.2.2.jar
* gcm.jar
* android-support-v4.jar

Google API [Android 2.2]具有:

* android.jar
* maps.jar

所以看起来我们在libs文件夹中放置的内容会自动添加到Android私有库中,这是否准确?因此,他们可以登录SVN,当其他人检查并构建它时,Android私有库中的.jars将只指向他的本地工作区,这不是问题。

然而,Android Dependencies中的annotations.jar和Google API中的android.jar和maps.jar正在引用我C:上的android-sdk文件夹。因此,当其他人签出我的整个项目时,他们会构建必须通过Java Build Path解决的问题。

将所有库存储在SVN中的标准做法是什么,以便当新开发人员进入并检出项目时,他只是在不设置设置的情况下构建?我怀疑我们正在使用构建管理系统,持续集成,构建服务器等等。所以我稍微了解它但从未实际使用它,因为我从未在足够大的团队中工作过。如果有人能够如此友好地给我他们使用的东西(Maven,Gradle等实际工具),那么我们将非常感激!

谢谢,

-V

1 个答案:

答案 0 :(得分:5)

ADK添加到类路径的库没有什么特别之处。如果您希望能够检入项目的所有依赖项,则可以将引用的jar复制到本地目录,然后将类路径指向那些而不是使用提供的库组。因为android插件有一个新的古怪的系统,自动将libs目录中的东西添加到你的路径和你的apk,我不建议把这些其他的罐子放在那里。通常我们在这里做的是在svn中创建一个单独的文件夹,命名为第三方或类似的东西,然后使用svn:externals来引用必要的jar。有一个共同的位置来存储第三方罐子使版本控制和配置管理更容易。

为了更清楚地说明事情,这就是一个示例subversion存储库的样子:

repo
    -android_project
        -trunk
            -your other project stuff (src, etc)
            -libs
                -android-support-v4.jar
                -bugsense3.2.2.jar
                -gcm.jar
            -third-party
                -annotations.jar (external)
                -android.jar (external)
                -maps.jar (external)
third-party
    -android
        -v_X.XX
            -annotations.jar
            -android.jar
            -maps.jar

在您的实际Eclipse项目中,您可以手动将第三方中的内容添加到路径中,并且adk会自动将库中的内容添加到路径中。

修改

关于这个方法与Maven的主题,我要承认的第一件事是我没有Maven的大量经验。据我所知,我认为它不符合你的标准。当我使用Maven时,默认情况下它会将您的依赖项下载到特定于计算机的位置,而不是下载到您的工作区。要让Eclipse获取这些依赖项,您必须将M2_HOME属性添加到工作区,以便它可以正确地解析所有路径。设置所有这些内容非常容易,因为有mvn命令可以自动执行该过程,但对于不熟悉系统的人来说,当新开发人员启动项目时,可能会导致很多混乱并减慢速度。此外,我们遇到的一个大问题是,它要求将依赖关系存储在某种中央存储库中,这使得在非连接区域中工作变得非常困难。

再一次,我不是Maven的专家,所以拿出我所说的一点点,但从我的经验来看,Maven在开源环境中工作得很好,在这种环境中,连接受到欢迎并几乎得到保证,但不是很多闭源环境。它似乎造成了比我们解决的问题更多的问题,因此从未真正流行起来。关于我上面描述的系统的好处是,在结账后,你有一个文件夹,其中包含开发和构建项目所需的所有内容(eclipse除外)。这使得在新机器或不熟悉的环境中启动和运行起来非常容易。

我会说Maven提供的一大好处是一致性。使用我描述的系统,开发人员负责设置项目的各个方面。这意味着在开发人员和项目之间,您可以获得svn存储库布局方式的变化。一个开发人员可以将目录命名为“第三方”,而另一个开发人员可以将其命名为“开源”,或者某些开发人员可能不会在其项目中使用主干。随着时间的推移,这些小东西可能会积聚并使您的存储库变得混乱。由于Maven负责项目的布局,因此可以确保您的存储库保持一致。