maven属性的约定:“点案”还是“骆驼案”?

2022-09-03 07:16:23

使用 java 和 ,maven 属性的约定是什么?Maven

我在这里发布了2个例子,这两个例子都被广泛使用。按照惯例,哪一个是正确的?

示例 A

<properties>
    <hibernate.version>4.3.8.Final</hibernate.version>
    <hsqldb.version>2.3.2</hsqldb.version>
    <log4j2.version>2.0.2</log4j2.version>
</properties>

示例 B

<properties>
    <hibernateVersion>4.3.8.Final</hibernateVersion>
    <hsqldbVersion>2.3.2</hsqldbVersion>
    <log4j2Version>2.0.2</log4j2Version>
</properties>

编辑:

这是Maven属性指南的链接。maven 属性的一些示例包括(点大小写)和(点大小写和驼峰大小写)。${project.build.directory}${project.build.outputDirectory}

官方文档Maven POM Reference提出了一个名为(骆驼案例)的示例属性。<someVar>


答案 1

在阅读了相关文档后,答案一直很清楚。

和 之间的明显冲突是,一个用于引用 POM 中的分层结构,而另一个用于变量命名dot.casecamelCase

例如,让我们看一下 。据我所知,这里的点表示法是指变量所在的pom结构,而变量名称本身确实是骆驼大小写。${project.build.outputDirectory}

<project>
  <build>
    <outputDirectory>/opt/foo</outputDirectory>
  </build>
</project>

换言之,约定如下:

  • 要引用位于POM中其他位置的变量,请将路径段(例如或)与分隔符组合在一起,即使用dot.case。例子:projectbuild.
    • project.build.<variable>
    • maven.compiler.<variable>
  • 要命名实际的路径段,包括变量名称本身(最后一个段),请使用较低的CamelCase。例子:
    • outputDirectory(如project.build.outputDirectory)
    • target(如maven.compiler.target)

值得注意的是,大多数开源项目(包括例如Spring Boot,pre-Gradle-migration - 请参阅此处)用作路径段,而不是作为变量名称的补充。.version

一致性是最重要的考虑因素。如果你的代码库正在使用,坚持这一点 - 否则更喜欢。someDependencyVersionsomeDependency.version


答案 2

我可能迟到了,但这是我的2美分。

考虑一下,您可能需要检查是否有更新的版本可用。您必须在 pom 中找到每个依赖项引用,才能知道库的 groupId 和 artifactId。

另一方面,如果使用如下所示的命名约定,则可以立即知道该版本是对 groupId 的引用还是 artifactId,只需复制粘贴并搜索最新版本即可。

<properties>
    <ch.qos.logback.version>1.2.5</ch.qos.logback.version>
    <logstash-logback-encoder.version>6.6</logstash-logback-encoder.version>
</properties>