Java 如何在编译时强制执行样式规则和约定?
我们的开发团队在编写代码时遵循一组规则。我一直在玩弄在编译时明确执行这些规则的想法。我们在IDE中有一些设置,显示了许多规则的提示,但不是所有规则。还有一些错误仍然存在。除了格式化(我们可以使用Checkstyle进行检查,并使用maven使构建失败),是否有可能在编译时强制执行这些规则Java 如何在编译时强制执行样式规则和约定?,java,Java,我们的开发团队在编写代码时遵循一组规则。我一直在玩弄在编译时明确执行这些规则的想法。我们在IDE中有一些设置,显示了许多规则的提示,但不是所有规则。还有一些错误仍然存在。除了格式化(我们可以使用Checkstyle进行检查,并使用maven使构建失败),是否有可能在编译时强制执行这些规则 每个Bean和Dao都需要一个具有相同名称+测试的测试文件,例如:personDao.java->personDaoTest.java 每个实体(用@entity注释)必须位于以.entities结尾的包中
- 每个Bean和Dao都需要一个具有相同名称+测试的测试文件,例如:personDao.java->personDaoTest.java
- 每个实体(用@entity注释)必须位于以.entities结尾的包中
- 不允许调用任何System.out.print*方法(这些方法经常用于调试,但不应签入我们的代码库)
实体中
包如下所示
public class EntityTest {
private JavaClasses classes;
@Before
public void setUp() {
classes = new ClassFileImporter().importPackages("org.my.company");
}
@Test
public void classesAnnotatedAsEntitiesShouldResideInEntitiesPackage() {
ArchRuleDefinition.classes()
.that().areAnnotatedWith(Entity.class)
.should().resideInAnyPackage("..entities")
.check(this.classes);
}
}
不是答案,但您是否尝试查看SonarQube()?即使没有得到他们的建议,如果违反了某些规则,您也可以使构建失败,并且它可以覆盖比您的需求更多的内容。对任何项目都是一个很好的补充:)或者您可以在授权合并拉取请求时强制执行编码规则。@Spi谢谢,我们将研究SonarQube!这太棒了!我甚至没有考虑对体系结构本身进行单元测试的可能性,这使得实现规则变得轻而易举(特别是因为我们不需要任何额外的体系结构)!非常感谢你