我有一个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
.
我写了一个查找每个模块的测试,如果找到这两个模块就会失败,但我认为应该有一个更简单/更直接的方法来做到这一点.