我有一个项目使用几个(目前约 6 个)依赖项(其他库)。它们中的大多数都在 MIT/简化的 BSD 许可证上,所以将它们复制到我的 repo 应该不是问题。
将所有这些库放入我的存储库并推送它们是否是一个好习惯(当新版本出现时,也更新它们)?或者我的项目仓库应该只包含项目文件(代码、 Assets 等)?
优点:
缺点:
有些库可能没有很好的许可证,直接使用它们(除了要求用户自己获取有效库之外)并将它们放在我的 repo 中可能会带来一些麻烦
拥有更多项目来保持依赖性意味着我必须同时为所有项目更新它们(例如,如果我根据当前项目(它的库)创建一些其他项目,那么它们都将具有相同的依存关系)
最佳答案
简短回答:视情况而定。
长答案:
在你质疑将代码包含在你的存储库中是否合适之前,你应该问清楚是否应该严格控制依赖关系或更放松。
这个问题的答案取决于您如何分发您的项目、您的客户/用户想要什么、您是否需要对依赖项进行任何源代码更改以及任何其他项目要求。
例如,假设您要销售硬件设备,而您的代码是设备的固件。在这种情况下,您可能希望严格控制依赖项(需要非常特定的版本)。这使您可以完全控制整个系统,从而简化系统测试,并且如果您的设备符合某些安全、保障或可靠性要求(例如,它是医疗设备或发送到 Pluto 的探针),则这一点可能很重要。一般来说,如果您以二进制或文件系统镜像的形式分发您的产品,您可能希望使用固定依赖项。
如果您希望用户能够动态链接到他们系统随附的任何版本的依赖项(这在很多方面都很有值(value),包括安全更新),那么您可能希望放宽要求。明确支持哪些版本,将自己限制在这些版本中可用的文档化 API,使用工具来强制执行要求(如果依赖项太旧则出错),并针对尽可能多的依赖项版本测试您的代码.
一旦您知道您希望对依赖项进行多严格的控制,您就可以选择用于管理它们的机制。您可以使用 Apache Ivy 之类的工具来自动获取依赖项,使用 GNU Autoconf 来执行特定版本,或者您可以将代码 pull 入 Git 存储库并自行构建。具体的选择并不重要;使用任何满足您的要求并且对您和您的用户来说最简单的东西。
关于c++ - 将所有项目依赖项放入项目存储库中是好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32154192/
我试图获取一个长度在1到10之间的字符串,并输出将字符串分解为大小为1、2或3的连续子字符串的所有可能方式。例如:输入:123456将整数分割成单个字符,然后继续查找组合。该代码将返回以下所有数组。[1,2,3,4,5,6][12,3,4,5,6][1,23,4,5,6][1,2,34,5,6][1,2,3,45,6][1,2,3,4,56][12,34,5,6][12,3,45,6][12,3,4,56][1,23,45,6][1,2,34,56][1,23,4,56][12,34,56][123,4,5,6][1,234,5,6][1,2,345,6][1,2,3,456][123
如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby
我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server
我在我的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="
我正在尝试修改当前依赖于定义为activeresource的gem:s.add_dependency"activeresource","~>3.0"为了让gem与Rails4一起工作,我需要扩展依赖关系以与activeresource的版本3或4一起工作。我不想简单地添加以下内容,因为它可能会在以后引起问题:s.add_dependency"activeresource",">=3.0"有没有办法指定可接受版本的列表?~>3.0还是~>4.0? 最佳答案 根据thedocumentation,如果你想要3到4之间的所有版本,你可以这
当我的预订模型通过rake任务在状态机上转换时,我试图找出如何跳过对ActiveRecord对象的特定实例的验证。我想在reservation.close时跳过所有验证!叫做。希望调用reservation.close!(:validate=>false)之类的东西。仅供引用,我们正在使用https://github.com/pluginaweek/state_machine用于状态机。这是我的预订模型的示例。classReservation["requested","negotiating","approved"])}state_machine:initial=>'requested
我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("
我有这个html标记:我想得到这个:我如何使用Nokogiri做到这一点? 最佳答案 require'nokogiri'doc=Nokogiri::HTML('')您可以通过xpath删除所有属性:doc.xpath('//@*').remove或者,如果您需要做一些更复杂的事情,有时使用以下方法遍历所有元素会更容易:doc.traversedo|node|node.keys.eachdo|attribute|node.deleteattributeendend 关于ruby-Nokog
我想获取模块中定义的所有常量的值:moduleLettersA='apple'.freezeB='boy'.freezeendconstants给了我常量的名字:Letters.constants(false)#=>[:A,:B]如何获取它们的值的数组,即["apple","boy"]? 最佳答案 为了做到这一点,请使用mapLetters.constants(false).map&Letters.method(:const_get)这将返回["a","b"]第二种方式:Letters.constants(false).map{|c