作为Maven(客户端)和IvyResolver(由Gradle使用),Bundler解决了在配置文件(捆绑器的Gemfile)上声明的库依赖关系.然而,在此之后Bundler将依赖解析保存在Gemfile.lock上.它允许其他开发人员使用完全相同的库.
例如,Maven通过不明确的方式使用决定论者来解决依赖性解析中的冲突.例如,将版本指定为...
<version>1.0.1</version>
Run Code Online (Sandbox Code Playgroud)
不保证将使用该版本.并指定版本为......
<version>[1.0.0,2.0.0)</version>
Run Code Online (Sandbox Code Playgroud)
给我们几乎不保证.
是的,我可以手动编写所有列出的版本
mvn dependency:resolve
Run Code Online (Sandbox Code Playgroud)
但是,有没有自动的方法呢?
要非常清楚:在Maven或Gradle中是否有与Gemfile.lock相同的东西?
Java开发人员,如果您不熟悉Gemfile.lock,Bundler,请检查:
http://bundler.io/v1.3/rationale.html
我在下面复制的重要部分:
检查您的代码到版本控制
在开发应用程序一段时间后,请检查应用程序以及Gemfile和Gemfile.lock快照.现在,您的存储库记录了您上次确认应用程序运行时所使用的所有gem的确切版本.请记住,当你的Gemfile中列出只有三个宝石(有不同程度的版本严格的),您的应用程序依赖于几十个宝石,一旦你考虑到所有的宝石隐含要求你依赖.
这很重要:Gemfile.lock使您的应用程序成为您自己的代码和上次运行时运行的第三方代码的单个包,确保一切正常.在Gemfile中指定您所依赖的第三方代码的确切版本不会提供相同的保证,因为Gems通常会为其依赖项声明一系列版本.
下次在同一台机器上运行bundle install时,bundler会看到它已经拥有您需要的所有依赖项,并跳过安装过程.
是的,对.如果你在pom.xml中声明了一个版本,maven会使用它.但是,如果它是在父母pom中宣布的,那么这个保证就会消失.
依赖关系中介 - 确定在遇到工件的多个版本时将使用哪个版本的依赖关系.目前,Maven 2.0仅支持使用"最接近的定义",这意味着它将在依赖树中使用与项目最接近的依赖项版本.您可以通过在项目的POM中明确声明它来保证版本.请注意,如果两个依赖关系版本在依赖关系树中处于相同的深度,则直到Maven 2.0.8没有定义哪一个会赢,但是自Maven 2.0.9开始,它就是声明中的顺序:第一个声明获胜.
"最接近的定义"表示所使用的版本将是依赖树中与项目最接近的版本,例如.如果A,B和C的依赖关系被定义为A - > B - > C - > D 2.0和A - > E - > D 1.0,则在构建A时将使用D 1.0,因为从A到D的路径是E更短.您可以在A中向D 2.0明确添加依赖项以强制使用D 2.0
哦,看起来这与DRY原则相反.
"Unix管道万岁".
由于我正在使用Eclipse IDE,因此我想在搜索结果中执行搜索.那可能吗?我怎样才能做到这一点?
例如:
Search for references of User (class).
> Search for validation in this result.
> Finally, search for specific pattern.
Run Code Online (Sandbox Code Playgroud) 这篇关于XML Schema的大文档没有解释cvc的含义:
http://www.w3.org/TR/2007/WD-xmlschema11-1-20070830/#validation_failures
很明显,这就像错误代码.但它是不存在的东西的首字母缩写(代码值约束???).