当前位置: 首页 > 知识库问答 >
问题:

Maven原型:验证artifactId或groupId

沈英勋
2023-03-14

我想构建一个Maven原型,检查提供的artifactId和groupId是否匹配给定的regex。通过这种方式,我想要强制执行我们组织的命名约定,例如ear文件的名称以-app结尾,并且所有组ID都以de.companyName开头。

https://maven.apache.org/archetype/archetype-models/archetype-descriptor/archetype-descriptor.html

但是当我通过eclipse构建原型时忽略了给定的值,这可能是由于eclipse中使用的maven-archetype-plugin的旧版本(这不适用于“内置”属性,如groupId或artifactId)。

共有1个答案

栾弘新
2023-03-14

这个:

  <requiredProperties>
    <requiredProperty key=.. >
      <defaultValue/>
      <validationRegex/>
    </requiredProperty>
  </requiredProperties>

...是定义必需属性的方法(带有默认值和验证)。然而,IIRC,它是在原型插件的V3.0.0中引入的,所以您可能使用的是以前的版本。

编辑1:针对这个问题“validationRegex是否可以应用于artifactId和GroupID”。是的,它可以。它可以应用于requiredproperties中的任何条目,但有一个警告:validationregex仅适用于命令行提供的输入,因此提供defaultvalue或通过命令行参数(-dgroupid=...-dartifactid=...)定义一个值。下面是一个具体的示例,给出了archetype-descriptor.xml中的以下requiredproperties:

<requiredProperties>
  <requiredProperty key="artifactId">
    <validationRegex>^[a-z]*$</validationRegex>
  </requiredProperty>
  <requiredProperty key="groupId">
    <defaultValue>COM.XYZ.PQR</defaultValue>
    <validationRegex>^[a-z]*$</validationRegex>
  </requiredProperty>
</requiredProperties>

以下命令:mvn archetype:generate-darchetypeGroupid=...-DarchetypeArtifactid=...-DarcheTypeVersion=...-dgroupid=com.foo.bar将导致com.foo.bar用于groupId,并且将提示用户提供一个artifactId,如下所示:

定义属性“username”的值(应与表达式“^[a-z]*$”匹配):Whatever

值与表达式不匹配,请重试:whater

定义属性得值...

到目前为止还算不错。

但以下命令mvn原型:generate-darchetypeGroupid=...-DarchetypeArtifactid=...-DarcheTypeVersion=...-dartifactid=whatever将导致com.xyz.pqr被用于groupId,即使这不符合validationregex

因此,总而言之:validationregex适用于任何requiredProperty(无论是保留属性(如artifactId)还是定制属性),但它只适用于交互提供的值,因此可以设置默认值或通过命令行参数端提供值来进行验证。

注意:即使您确实使用validationregex,您也可能希望考虑使用Maven Enforcer插件的requireProperty规则,因为在使用原型创建项目之后,您想要强制执行的项目属性可能会更改。从文档中:

此规则可以强制设置声明的属性,并可选地针对正则表达式对其求值。

这里有一个例子:

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-enforcer-plugin</artifactId>
    <version>3.0.0</version>
    <executions>
      <execution>
        <id>enforce-property</id>
        <goals>
          <goal>enforce</goal>
        </goals>
        <configuration>
          <rules>
            <requireProperty>
              <property>project.artifactId</property>
              <message>"Project artifactId must match ...some naming convention..."</message>
              <regex>...naming convention regex...</regex>
              <regexMessage>"Project artifactId must ..."</regexMessage>
            </requireProperty>
          </rules>
          <fail>true</fail>
        </configuration>
      </execution>
    </executions>
  </plugin>
 类似资料:
  • 我正在创建一个maven原型。在这里,我有一个原型项目,当用户调用以下命令时,它会为用户创建: MVN原型:生成-DArchetypeGroupId=xxx-DArchetypeArtifactId=Archtype-yyyy-DArchetypeVersion=1.1.0-S5-SNAPSHOT-DgroupId=zzz-DartifactId=pro11 在prototype pom中,我想使

  • 我正在使用axis2。战争在我耳边响起,我正在将我所有的jar打包在APP-INF中,并从axis2/META-INT/Manifest的窗口指向它们。在[类路径]中。我正在使用ws-security。 当我从axis2客户端请求它时,我得到了以下错误。 12:55:05359信息[STDOUT][ERROR]org/opensaml/xml/validation/ValidatingXMLObj

  • 问题内容: 我正在创建自己的Maven原型,这是我使用的项目的通用模板。 在该模板中,我有许多“ exec-maven-plugin”块,实际上每个项目都不同,这意味着在一个项目中,我可能有2个“ exec-maven- plugin”块,而在另一个项目中,我可能有3个或更多。 我希望当他使用我创建的原型创建项目时,由用户来驱动。例如,将要求用户提供许多主要类别,并根据他选择输入的主要类别,应创建

  • 这个问题已经被问了很多次了,即使是在经历了所有的解决方案之后,我也无法让hibernate validator工作。 控制器类:- servlet-上下文:- 依赖关系:- 验证类:- 我错过了什么?

  • 问题内容: 我想检查我的客户请求的类型是JSON还是HTML,因为我希望自己的路线能够同时满足人和机器的需求。 我在以下位置阅读了Express 3文档: http://expressjs.com/api.html 有两种方法和,使用方法如下: 要么 由于这些无法正常工作,因此我尝试使用: 要么 总是… 也不起作用。我究竟做错了什么? 编辑1 :我已经检查了正确的客户端HTML协商。这是我的两个不

  • 我试图按照官方文档创建一个JavaFXMaven项目(带有maven的IntelliJ章节,非模块化项目)。我将archtype artififact id替换为:,但当我尝试使用archtype创建项目时,仍然会出现以下错误: 无法执行目标org.apache.maven.plugins:maven-arch etype-plugin:3.1.1:生成(default-cli)在项目独立-pom