Java 如何在编译时强制执行样式规则和约定?

Java 如何在编译时强制执行样式规则和约定?,java,Java,我们的开发团队在编写代码时遵循一组规则。我一直在玩弄在编译时明确执行这些规则的想法。我们在IDE中有一些设置,显示了许多规则的提示,但不是所有规则。还有一些错误仍然存在。除了格式化(我们可以使用Checkstyle进行检查,并使用maven使构建失败),是否有可能在编译时强制执行这些规则 每个Bean和Dao都需要一个具有相同名称+测试的测试文件,例如:personDao.java->personDaoTest.java 每个实体(用@entity注释)必须位于以.entities结尾的包中

我们的开发团队在编写代码时遵循一组规则。我一直在玩弄在编译时明确执行这些规则的想法。我们在IDE中有一些设置,显示了许多规则的提示,但不是所有规则。还有一些错误仍然存在。除了格式化(我们可以使用Checkstyle进行检查,并使用maven使构建失败),是否有可能在编译时强制执行这些规则

  • 每个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!这太棒了!我甚至没有考虑对体系结构本身进行单元测试的可能性,这使得实现规则变得轻而易举(特别是因为我们不需要任何额外的体系结构)!非常感谢你