我想构建一个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)。
这个:
<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