我们正在尝试将几个多模块应用程序移动到 Maven,但遇到了一些问题。
每个模块独立存放在cvs中。我们有每个应用程序的 list 文件,其中列出了该应用程序所需的模块(以及可选的版本)。并非所有模块都是 Maven 形式。
因此应用程序“customer_care”具有以下 list :
<manifest>
<module id="MY_api"/>
<module id="custcare_webapp"/>
</manifest>
类似地,应用程序“核心批处理”具有如下 list :
<manifest>
<module id="MY_api"/>
<module id="core"/>
<module id="batch"/><!--NB this is a non-maven module -->
</manifest>
我已经开始“mavenising”我们的代码,所以 MY_api 项目有一个 pom.xml 定义了依赖关系,包括另一个内部代码模块“central_config”。我已指定版本 RELEASE。
一切正常,直到我需要创建卡住 list 。我可以为每个模块指定一个版本:
<manifest>
<module id="MY_api" version="0.123.0"/>
<module id="core" version="0.456.0"/>
<module id="batch" version="0.789.0"/><!--NB this is a non-maven module -->
</manifest>
但此构建不可重现,因为 MY_api 中“centralconfig”依赖项的版本是“RELEASE”。因此,如果有人发布了新版本的“centralconfig”,那么下次我们构建这个卡住的 list 时,情况就不同了。
那么为什么我们不使用像 central-config 这样的依赖项的硬编码版本呢?因为那时,每次有人将 centralconfig 更新到新版本时,我们可能必须更新 10 或 20 个 pom 文件。依赖于中央配置的一切,以及依赖于中央配置的一切,都需要更新 pom.xml 并重新发布。这不仅需要大量工作,而且我不知道如何以编程方式可靠地识别每个声明对中央配置有依赖性的模块。
我可以在一个地方定义“centralconfig.version”,然后在我的所有模块中引用它吗?如果是这样,我应该在哪里做这个?我对 parent poms 了解不多,但我觉得他们可能会提供解决方案。
似乎使用父 pom 是可行的方法。但是根据这个问题: Can maven projects have multiple parents? ,maven子项目不可能有多个父项。
那么 MY_api 模块如何成为 custcare_webapp 和 core_batch 的子模块呢?
我得出的结论是 Maven 不能满足我的要求,我们又回到了使用 12 年前使用 ant 和 CVS 构建的自制解决方案。
最佳答案
通常比管理版本的父结构更好的另一个选择是导入依赖项。
为了说明这是如何工作的,您创建了一个仅包含一个 pom 的项目,该 pom 指定了用于所有模块的版本:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>test</groupId>
<artifactId>module-versions</artifactId>
<packaging>pom</packaging>
<version>1.0</version>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>test</groupId>
<artifactId>a</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>foo</groupId>
<artifactId>bar</artifactId>
<version>2</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
然后,在所有需要依赖于任何硬编码版本的项目中,按以下方式导入该项目:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>test</groupId>
<artifactId>module-versions</artifactId>
<version>1.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
这样一来,只要您发布任何依赖的新版本,您只需更改 module-versions 项目即可。
通过这种方式,您可以拥有多个“模块版本”-项目来将事情分开一些。
当然,你仍然有一个问题,所有项目要使用新版本也必须依次发布,但这是在 Maven 中使用已发布的依赖项的成本。
关于java - 如何将多模块项目移动到maven,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30258125/
我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div
总的来说,我对ruby还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用
假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于
作为我的Rails应用程序的一部分,我编写了一个小导入程序,它从我们的LDAP系统中吸取数据并将其塞入一个用户表中。不幸的是,与LDAP相关的代码在遍历我们的32K用户时泄漏了大量内存,我一直无法弄清楚如何解决这个问题。这个问题似乎在某种程度上与LDAP库有关,因为当我删除对LDAP内容的调用时,内存使用情况会很好地稳定下来。此外,不断增加的对象是Net::BER::BerIdentifiedString和Net::BER::BerIdentifiedArray,它们都是LDAP库的一部分。当我运行导入时,内存使用量最终达到超过1GB的峰值。如果问题存在,我需要找到一些方法来更正我的代
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru
我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t
我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚
如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby
我的代码目前看起来像这样numbers=[1,2,3,4,5]defpop_threepop=[]3.times{pop有没有办法在一行中完成pop_three方法中的内容?我基本上想做类似numbers.slice(0,3)的事情,但要删除切片中的数组项。嗯...嗯,我想我刚刚意识到我可以试试slice! 最佳答案 是numbers.pop(3)或者numbers.shift(3)如果你想要另一边。 关于ruby-多次弹出/移动ruby数组,我们在StackOverflow上找到一