Maven原型插件不允许原型资源中的.resources通过
Posted
技术标签:
【中文标题】Maven原型插件不允许原型资源中的.resources通过【英文标题】:Maven archetype plugin doesn't let .resources in archetype-resources through 【发布时间】:2011-11-02 13:22:27 【问题描述】:如何使.gitignore
等资源成为最终项目的一部分?
-
用
archetype-resources/.gitignore
创建原型
mvn install
mvn archetype:generate
生成的项目不包含.gitignore
PS。我确定它不存在。
【问题讨论】:
这里所有的解决方案,只解决了一半的问题。他们使用.gitignore
构建了原型:但是您如何使用.gitignore
生成?
每个版本的行为都发生了变化,并且其中一项或多项调整都奏效了,这真是太好了。寻找具有最新插件版本的完整解决方案。
可以在Github#fortybits/a-bit-of-archetype找到重现和解决我正在尝试的问题的示例项目
【参考方案1】:
该错误似乎仍然存在于 maven-archetype-plugin v3.0.1 中。 对于那些不想降级 maven-resource-plugin 的人。我设法建立了一个或多或少丑陋的解决方法。
首先你将archetype-resources/.gitignore 重命名为
__gitignore__
然后在archetype-metadata.xml
里面添加
<requiredProperties>
<requiredProperty key="gitignore">
<defaultValue>.gitignore</defaultValue>
</requiredProperty>
</requiredProperties>
<fileSets>
<fileSet>
<directory></directory>
<includes>
<include>__gitignore__</include>
</includes>
</fileSet>
</fileSets>
生成原型时,maven 现在将首先复制__gitignore__
,然后看到__[file]__
语法并将其替换为默认值“.gitignore”
【讨论】:
非常感谢!...请注意,这是双倍的_
:)
虽然我可以看到__gitignore__
文件是用最新版本的原型复制的,但该文件没有被 maven 重命名。
非常感谢!这是完美的解决方法
好吧,我会被诅咒的。人们会期望像 .gitignore 出现在生成的项目中这样简单的事情会被授予,但到 2021 年仍然没有。谢谢,这实际上工作得很好。【参考方案2】:
https://issues.apache.org/jira/browse/MRESOURCES-190 即将推出的 maven-resources-plugin v3.0.0(发布时尚未发布;当前仍然是 2.7)的解决方案似乎比阻止版本升级更好:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<!-- Required so that .gitignore gets included in archetypes; see https://issues.apache.org/jira/browse/MRESOURCES-190 -->
<addDefaultExcludes>false</addDefaultExcludes>
【讨论】:
我可以使用“addDefaultExcludes”来确认它是否有效。使用原型 2.4 和 maven-resources-plugin v.3.0.1 仍然有同样的问题。 addDefaultExcludes 工作正常,如此处所述。终于!src/main/resources/META-INF/maven/archetype-metadata.xml
中的文件集条目仍然需要。见:***.com/a/8909897/3165190【参考方案3】:
将fileSet
条目添加到src/main/resources/META-INF/maven/archetype-metadata.xml
并带有一个空目录标签:
<fileSet>
<directory></directory>
<includes>
<include>.gitignore</include>
</includes>
</fileSet>
这会将包含的文件从src/main/resources/archetype-resources
复制到项目根目录。
【讨论】:
【参考方案4】:通过在调试时启动 Maven 构建(使用 -X 选项)检查您的 maven-resources-plugin 版本。如果你使用 2.7,there is a regression where .gitignore files are silently ignored。
在这种情况下,您必须在 pom.xml 中明确使用 2.6:
<build>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.6</version>
</plugin>
</plugins>
</pluginManagement>
</build>
【讨论】:
【参考方案5】:ARCHETYPE/issues/ARCHETYPE-505 表明,当前版本的插件和 maven 彻底打破了这一点。没有解决方法对此有帮助。
【讨论】:
【参考方案6】:对我来说完美的解决方案是使用原型安装后 groovy 脚本。
在原型项目的资源文件夹中创建一个文件META-INF/archetype-post-generate.groovy
。
添加此代码:
file = new File( request.getOutputDirectory(), request.getArtifactId()+"/.gitignore.tmpl" );
def gitIgnorefile = new File( request.getOutputDirectory(), request.getArtifactId()+"/.gitignore" );
file.renameTo(gitIgnorefile)
在您的 archetype-metadata.xml
文件中包含模板 .gitignore.tmpl
文件。
<fileSet>
<directory/>
<includes>
<include>.gitignore.tmpl</include>
</includes>
</fileSet>
我在使用 maven 资源插件时遇到问题,因此使用了 groovy 脚本解决方案。
【讨论】:
很久以前有人问过问题,maven 版本可能有所不同,或者可能存在任何其他问题。请尝试以更好的方式解释您的答案,例如添加 maven 版本或其他任何提供更好的东西洞察你的答案。 对于maven-archetype-plugin
3.2.0 和maven-resources-plugin
3.2.0,原始答案中的问题再次出现。以前的解决方法 (<addDefaultExcludes>false</addDefaultExcludes>
) 不起作用,但 META-INF/archetype-post-generate.groovy
的解决方案对我来说非常有效!
这对我也有用。可能值得指定的是,要使其工作,模板项目中的.gitignore
文件也必须重命名为.gitignore.tmpl
,与此解决方案中指定的<include/>
属性的值匹配。事后看来可能很明显,但我花了一段时间才弄清楚。【参考方案7】:
降级maven-resources-plugin
的替代方法是强制执行实际上具有回归的plexus-utils
版本:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.7</version>
<dependencies>
<!-- it's for fixing maven-resources-plugin 2.7 MRESOURCES-190 -->
<dependency>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-utils</artifactId>
<!-- this is last 2.x release -->
<version>2.1</version>
</dependency>
</dependencies>
</plugin>
【讨论】:
【参考方案8】:该错误仍在最新的 maven-archetype-plugin 2.4 和 maven-resources-plugin 3.0.1 中。
解决办法如下:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-archetype-plugin</artifactId>
<version>2.2</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.6</version>
</plugin>
在你生成的 pom.xml 中你应该添加
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.6</version>
</plugin>
【讨论】:
vorburger 的solution 更好,因为它不涉及使用旧插件。以上是关于Maven原型插件不允许原型资源中的.resources通过的主要内容,如果未能解决你的问题,请参考以下文章