5

问题:

当一个项目签入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 Private Libraries 中的 .jar 将简单地指向他的本地工作区,因此这不是问题。

但是,Android Dependencies 中的 annotations.jar 和 Google API 中的 android.jar 和 maps.jar 正在引用我 C: 上的 android-sdk 文件夹。因此,当其他人检查我的整个项目时,他们会遇到必须通过 Java 构建路径解决的构建问题。

将所有库以某种方式存储在 SVN 中的标准做法是什么,当新开发人员进来并签出项目时,他只需构建而不摆弄设置?我怀疑我们正在使用构建管理系统、持续集成、构建服务器等领域。所以我知道一点,但从未实际使用过它,因为我从未在足够大的团队中工作过. 如果有人愿意准确地告诉我他们使用的是什么(Maven、Gradle 等实际工具),那将不胜感激!

谢谢,

-V

4

1 回答 1

5

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

为了更清楚地说明事情,这是一个示例 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 负责项目的布局,您可以放心,您的存储库将保持一致。

于 2013-06-24T23:24:09.667 回答