我有一个Maven项目,它定义了两个独立的配置文件,developer并且release(当然你得到了漂移,这里).我想要随时激活这两个配置文件中的一个,但绝不会同时激活.如果两者都以某种方式被激活,那么这个构建没有意义,应该失败.如果两者都没有被激活,那么这个构建也没有意义,应该失败.
我确信我可以编写一些自定义插件代码来实现这一点,我可能最终会这样做,但我有兴趣使用POM配置(可以使用Maven Central的现有插件)来实现这一点.
应该可以使用-P(--activate-profiles)激活插件,因此<activation>通过属性不是有效的解决方案.使用的解决方案activeByDefault也无效,因为activeByDefault通常称为陷阱,不可靠(我们实际上可能激活其他配置文件,因此activateByDefault无法使用).
您的建议非常感谢.
我正在写foo一个依赖于它的java库bar:1.1+.但是bar随着时间的推移,库已经发生了很大变化,我想确保我的库与每个版本的bar(1.1... 1.10)兼容.
因此,我希望(在CI期间)使用类路径运行每个单元测试,包括bar:1.X每个版本的可用版本bar.
我正在使用gradle和junit/spock,但我愿意接受各种变化的解决方案.
我可以通过gradle测试任务复制,但这非常麻烦,测试结果可能很难聚合.理想情况下,我会在我的测试旁边定义它应该运行哪些版本的条,例如:
@RunWith("com.acme:bar:1.1..1.10")
public class MyTest { ... }
Run Code Online (Sandbox Code Playgroud)
但我发现没有工具/跑步者.
我的设置:
错误示例:
16:00:54 [INFO] [23:00:54.219] Sensor JavaSquidSensor
16:00:55 [INFO] [23:00:55.030] Java Main Files AST scan...
16:00:55 [INFO] [23:00:55.030] 1532 source files to be analyzed
16:00:58 [ERROR] [23:00:57.927] Class not found: javax.annotation.Nullable
16:00:58 [ERROR] [23:00:57.928] Class not found: javax.annotation.CheckReturnValue
16:00:58 [ERROR] [23:00:58.114] Class not found: javax.annotation.Nullable
Run Code Online (Sandbox Code Playgroud)
根据这个stackoverflow问题,javax.annotation应该是java 1.7及更高版本的一部分.此外,我已经尝试将它放在本地maven存储库中,但这没有帮助.
那么Sonar试图找到这个包裹在哪里?有什么帮助?!?
更新:
我有一个具有以下结构的项目:
parent
> core
> module-1 (with dependencies: A, B)
> module-2 (with dependencies: X, Y)
> project
Run Code Online (Sandbox Code Playgroud)
module-1并module-2在不同环境中提供相同的功能(数据访问).模块project取决于core,或者是module-1或module-2.
问题:如果我让project同时依赖于module-1和module-2,有很多不必要的传递依赖的(如部署到环境#1的时候我不需要X或Y,因为只有module-1在那里使用).
我想尽早如果两个构建失败module-1和module-2被指定为的依赖性project.
我写了一个查找每个模块的测试,如果找到这两个模块就会失败,但我认为应该有一个更简单/更直接的方法来做到这一点.