我有一个父项目多模块Maven项目P和三个子模块A,B和C.这两个B和C是战项目,都依赖于A.
我可以输入mvn compile在P和拥有所有的子模块正确的编译的.当我想为特定模块执行操作时,问题就来了.
我希望能够为项目打包一个war B,但是当我从B目录运行package命令时,它会抱怨它找不到依赖项A.
我从这个问题中理解:Maven和依赖模块可能Maven并不是真的设计用于这种类型的依赖解析,但这引出了如何打包的问题B?
mvn package我真的想要的时候是否必须运行整个项目层次结构B?
每次要打包时,是否必须将A的快照安装到本地存储库中B?
当A仍处于活跃开发阶段时,第二种情况并不是很有趣.
这里有什么最佳做法?
我在这里寻找一种通用技术,但让我们举一个具体的例子.我有一个多模块项目,我想exec:java从命令行对我的项目的一个子模块运行目标.
我知道一种方法是我可以mvn install在整个项目上运行,然后进入子模块目录,从命令行运行exec:java命令,并将工件解析到我的本地存储库.但是一直运行mvn install变得相当繁琐.
我真正喜欢的是能够exec:java对Maven反应堆运行,其中类路径是从Maven反应器中项目的活动模块构建的.问题是我不确定这是可能的.一种天真的方法是exec:java从项目的根目录运行目标,但这会尝试针对项目中的每个模块运行插件,而不是我感兴趣的目标模块.
任何的想法?我知道我的动机示例是exec:java,但实际上有很多单个插件目标,我想在整个构建生命周期的范围之外不时地针对我的项目运行.
我有一个自定义的Ruby库目录,我想在Ruby执行时自动添加到Ruby的加载路径中.我知道我可以使用Ruby的-I选项,但我想知道是否有类似我可以设置的环境变量,它将全局确定Ruby的加载路径.
顺便说一句,我的高级任务是在没有root的Linux机器上安装Ruby Gems,所以我需要在非标准位置有一个Ruby加载路径.我按照http://rubygems.org/read/chapter/3#page83("在用户目录中安装RubyGems")的说明安装了RubyGems,但gem命令没有获取非标准的加载路径.也许我错过了一些明显的东西,让自己变得更难?
我有一个简单的协议属性:
@protocol StopsSource <NSObject>
@property (retain,readonly) NSArray * stops;
@end
Run Code Online (Sandbox Code Playgroud)
我在别处添加一个键值观察器来监听"stops"属性的更改:
id<StopsSource> source = ...
[source addObserver:self
forKeyPath:@"stops"
options:NSKeyValueObservingOptionNew
context:nil];
Run Code Online (Sandbox Code Playgroud)
代码按预期工作,因为当"stops"属性发生更改时,我会获得observeValueForKeyPath事件.真正的烦恼是addObserver调用上的编译器警告:
warning: '-addObserver:forKeyPath:options:context:' not found in protocol(s)
Run Code Online (Sandbox Code Playgroud)
'addObserver'方法在NSObject的类别中定义:
@interface NSObject(NSKeyValueObserverRegistration)
Run Code Online (Sandbox Code Playgroud)
有没有办法让XCode放弃这个警告?我的理解是协议不能采用类别,所以我不确定如何将NSKeyValueObserverRegistration方法引入我的协议,而不是将声明复制到协议本身,这似乎是一个黑客.
我知道这是一个微不足道的问题,因为它只是一个编译器警告,但我很想知道是否有一种"正确"的方法来解决这个问题.
我有MKMapView一个注册代表,所以我可以听区域更改事件(特别是regionDidChangeAnimated).我正在寻找一种可靠的方法来判断区域更改事件是否是用户拖动地图或编程setRegion:请求的结果.
我的目标是拥有一个基于位置跟踪自动居中地图的应用程序,除非用户手动平移地图,此时自动居中将关闭.因此,我正在调用setRegion:以适当地重新定位地图视图,但是我很难regionDidChangeAnimated:确定对委托的结果调用是编程还是来自用户泛.我已经尝试过将某些东西放在一起,但是当用户开始平移时,我会继续遇到竞争条件,就像位置更新一样.
我有一个类我是单元测试,需要相当广泛的数据库设置才能运行各个测试方法.这种设置需要很长时间:由于希望与手头的问题无关,我需要以编程方式而不是SQL转储来填充数据库.
我遇到的问题是拆除.如何轻松回滚数据库设置阶段中所做的所有更改?
我目前正在使用Hibernate + Spring Transactional Testing支持,这样我的各个测试方法都包含在事务中.
一种解决方案是在每个测试方法中进行数据库设置,以便自动回滚数据库设置.但是,测试方法需要永远运行,因为每个方法都需要重新准备数据库.
还有其他想法吗?基本上,我正在寻找一种方法来运行我的数据库设置,运行我的单独测试(每个测试都包含在执行后回滚的事务中),然后回滚初始数据库设置.有关使其以Hibernate/Spring/Junit方式工作的任何想法吗?是否有一个Hibernate"drop all tables"等效命令?
我正在使用Apache Web服务xml rpc库向rpc服务发出请求.该过程中的某个位置是一个xml文档,其中包含对http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd的DTD引用,该库在解析XML时会尝试下载.该下载因503状态代码而失败,因为w3c阻止从Java客户端重复下载此静态文档.
解决方案是XML Catalogs,用于本地缓存DTD.但是,虽然我可以找到直接在JAXP SAXParser实例上设置EntityHandler以启用目录解析器支持的示例,但实际上我并没有访问底层解析器.它只是被xml rpc库使用.有什么办法可以设置全局属性或者告诉JAXP使用XML目录的东西吗?
我正在寻找一种方法来告诉Java程序,如果特定区域设置更喜欢在上午12点/下午或24小时时钟显示时间.现在,通常我会使用DateFormat来正确格式化日期,以适合Locale.但是,我正在尝试本地化传输时间表的词干日历显示,这需要对区域设置首选项有一些直接的了解.您可以在此处查看计划示例:
http://onebusaway.org/where/standard/schedule.action?id=1_538
关于如何以编程方式检测12小时AM/PM与24小时的任何想法?
我试图调用一个看起来像这样的构造函数方法:
public static SomeWrapper<T> method(Class<T> arg);
Run Code Online (Sandbox Code Playgroud)
当T是像String或Integer这样的非参数化类型时,调用很简单:
SomeWrapper<String> wrapper = method(String.class);
Run Code Online (Sandbox Code Playgroud)
当T是参数化类型时,事情变得棘手List<String>.以下内容无效:
SomeWrapper<List<String>> wrapper = method(List<String>.class);
Run Code Online (Sandbox Code Playgroud)
关于我唯一能想到的是:
List<String> o = new ArrayList<String>();
Class<List<String>> c = (Class<List<String>>) o.getClass();
SomeWrapper<List<String>> wrapper = method(c);
Run Code Online (Sandbox Code Playgroud)
当然有一种更简单的方法,不需要构建额外的对象?