问题:
当一个项目 checkin SVN,别人 checkout 时,上面有感叹号,构建路径错误需要解决。如何解决?
例如,我有一个项目,其结构如下:
它在 libs 文件夹中有 3 个库:
* android-support-v4.jar
* bugsense3.2.2.jar
* gcm.jar
Android Dependencies 文件夹有:
* annotations.jar
引用的库有:
* gcm.jar
Android 私有(private)库有:
* bugsense3.2.2.jar
* gcm.jar
* android-support-v4.jar
Google API [Android 2.2] 具有:
* android.jar
* maps.jar
所以看起来我们放在 libs 文件夹中的任何内容都会自动添加到 Android 私有(private)库中,这是否准确?因此,他们可以 checkin SVN,当其他人 checkout 并构建它时,Android 私有(private)库中的 .jars 将简单地指向他的本地工作区,所以这不是问题。
但是,Android Dependencies 中的 annotations.jar 和 Google API 中的 android.jar 和 maps.jar 引用了我 C: 上的 android-sdk 文件夹。因此,当其他人检查我的整个项目时,他们会遇到必须通过 Java 构建路径解决的构建问题。
将所有库以这样一种方式存储在 SVN 中的标准做法是什么,当新开发人员进来并 checkout 项目时,他只需构建而无需摆弄设置?我怀疑我们正在使用构建管理系统、持续集成、构建服务器等领域。所以我对它略有了解,但从未实际使用过它,因为我从未在足够大的团队中工作过.如果有人愿意告诉我他们使用的确切工具(实际工具,如 Maven、Gradle 等),那么将不胜感激!
谢谢,
-V
最佳答案
ADK 添加到类路径的库没有什么特别之处。如果您希望能够 checkin 项目的所有依赖项,您可以将引用的 jar 复制到本地目录,然后将类路径指向那些而不是使用提供的库组。因为 android 插件有一个新的古怪系统,它会自动将 libs 目录中的内容添加到您的路径和 apk 中,所以我不建议将这些其他 jar 放在那里。通常我们在这里做的是在 svn 中创建一个名为 third-party 或类似名称的单独文件夹,然后使用 svn:externals引用必要的 jar 。拥有一个共同的地方来存储第三方 jar 使得版本控制和配置管理更加容易。
为了更清楚地说明事情,这是一个示例颠覆存储库的样子:
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项目中,你会手动将third-party中的东西添加到路径中,adk会自动将libs中的东西添加到路径中。
编辑
关于此方法与 Maven 的对比,我要承认的第一件事是我没有大量的 Maven 经验。据我所知,我认为它不太符合您的标准。当我使用 Maven 时,默认情况下它会将您的依赖项下载到特定于机器的位置,而不是您的工作区。为了让 Eclipse 获取这些依赖项,您必须向工作区添加一个 M2_HOME 属性,以便它可以正确解析所有路径。设置所有这些东西非常容易,因为有 mvn 命令可以自动执行该过程,但是对于不熟悉该系统的人来说,当新开发人员开始一个项目时,它可能会造成很多困惑并减慢速度。此外,我们遇到的一个大问题是它需要将依赖项存储在某种中央存储库中,这使得在非连接区域工作非常困难。
再次声明,我不是 Maven 专家,所以请对我所说的持保留态度,但根据我的经验,Maven 在开放源代码环境中工作得很好,在开放源代码环境中,连接是受欢迎的,几乎可以保证,但在闭源环境。它似乎给我们带来的问题比解决的问题还多,因此从未真正流行起来。我上面描述的系统的好处是,在结帐之后,您有一个文件夹,其中包含开发和构建项目所需的所有内容(eclipse 除外)。这使得在新机器或不熟悉的环境上启动和运行变得非常容易。
我会说 Maven 提供的一大好处是一致性。使用我描述的系统,开发人员负责设置项目的各个方面。这意味着在开发人员和项目之间,您可以在 svn 存储库的布局方式上有所不同。一位开发人员可以将目录命名为“第三方”,而另一位开发人员可以将其命名为“开源”,或者某些开发人员可能不会在他们的项目中使用主干。随着时间的推移,这些小东西会累积起来,让你的存储库变得一团糟。由于 Maven 负责项目的布局,您可以放心,您的存储库将保持一致。
关于android - 在 Eclipse 中确保 SVN check out 后立即构建 Android 项目的实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17246166/
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby
我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘
我已经像这样安装了一个新的Rails项目:$railsnewsite它执行并到达:bundleinstall但是当它似乎尝试安装依赖项时我得到了这个错误Gem::Ext::BuildError:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcheckingforlibkern/OSAtomic.h...yescreatingMakefilemake"DESTDIR="cleanmake"DESTDIR="
假设我有这个范围:("aaaaa".."zzzzz")如何在不事先/每次生成整个项目的情况下从范围中获取第N个项目? 最佳答案 一种快速简便的方法:("aaaaa".."zzzzz").first(42).last#==>"aaabp"如果出于某种原因你不得不一遍又一遍地这样做,或者如果你需要避免为前N个元素构建中间数组,你可以这样写:moduleEnumerabledefskip(n)returnto_enum:skip,nunlessblock_given?each_with_indexdo|item,index|yieldit
在编写Ruby(客户端脚本)时,我看到了三种构建更长字符串的方法,包括行尾,所有这些对我来说“闻起来”有点难看。有没有更干净、更好的方法?变量递增。ifrender_quote?quote="NowthatthereistheTec-9,acrappyspraygunfromSouthMiami."quote+="ThisgunisadvertisedasthemostpopularguninAmericancrime.Doyoubelievethatshit?"quote+="Itactuallysaysthatinthelittlebookthatcomeswithit:themo
导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵
最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路
我正在尝试在配备ARMv7处理器的SynologyDS215j上安装ruby2.2.4或2.3.0。我用了optware-ng安装gcc、make、openssl、openssl-dev和zlib。我根据README中的说明安装了rbenv(版本1.0.0-19-g29b4da7)和ruby-build插件。.这些是随optware-ng安装的软件包及其版本binutils-2.25.1-1gcc-5.3.0-6gconv-modules-2.21-3glibc-opt-2.21-4libc-dev-2.21-1libgmp-6.0.0a-1libmpc-1.0.2-1libm
我认为我的问题最好用一个例子来描述。假设我有一个名为“Thing”的简单模型,它有一些简单数据类型的属性。像...Thing-foo:string-goo:string-bar:int这并不难。数据库表将包含具有这三个属性的三列,我可以使用@thing.foo或@thing.bar之类的东西访问它们。但我要解决的问题是当“foo”或“goo”不再包含在简单数据类型中时会发生什么?假设foo和goo代表相同类型的对象。也就是说,它们都是“Whazit”的实例,只是数据不同。所以现在事情可能看起来像这样......Thing-bar:int但是现在有一个新的模型叫做“Whazit”,看起来