如何使像 .gitignore
这样的资源成为生成项目的一部分?
- 创建包含
archetype-resources/.gitignore
的原型。 mvn install
mvn archetype:generate
- 生成的项目中不包含
.gitignore
。
注:我确定它不存在。
如何使像 .gitignore
这样的资源成为生成项目的一部分?
archetype-resources/.gitignore
的原型。mvn install
mvn archetype:generate
.gitignore
。注:我确定它不存在。
这个 bug 似乎仍然存在于 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"。__
:) - xbmono__gitignore__
文件被复制到了原型的最新版本中,但是该文件并没有被Maven重命名。 - Naman#set( $gitignore = ".gitignore" )
(在我的情况下,我使用了 pom.xml
)。 - snydergd这个针对即将发布的maven-resources-plugin v3.0.0(在发表时尚未发布;当前版本仍为2.7)的解决方案来自https://issues.apache.org/jira/browse/MRESOURCES-190,似乎比阻止版本升级更好:
<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>
src/main/resources/META-INF/maven/archetype-metadata.xml
中的文件集条目仍然是必需的。请参见:https://dev59.com/Bmsz5IYBdhLWcg3wVGEy#8909897 - Falko Menge在 src/main/resources/META-INF/maven/archetype-metadata.xml
中添加一个 fileSet
条目,并使用空的目录标签:
<fileSet>
<directory></directory>
<includes>
<include>.gitignore</include>
</includes>
</fileSet>
这将把src/main/resources/archetype-resources
中包含的文件复制到项目根目录。
启动Maven构建时,在调试模式下检查您的maven-resources-plugin版本(使用-X选项)。如果使用的是2.7版本,则会发生一个回归问题,即.gitignore文件会被静默忽略。
在这种情况下,您需要在pom.xml中明确使用2.6版本:
<build>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.6</version>
</plugin>
</plugins>
</pluginManagement>
</build>
在寻找解决方案时,查看了maven-archetype-plugin的常见问题解答部分,显然,版本3.2.1支持这种情况,即我们现在可以包含.gitignore。 为此,需要配置maven-resources和maven-archtype-plugin:
<plugins>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<addDefaultExcludes>false</addDefaultExcludes>
</configuration>
</plugin>
<plugin>
<artifactId>maven-archetype-plugin</artifactId>
<configuration>
<useDefaultExcludes>false</useDefaultExcludes>
</configuration>
</plugin>
</plugins>
注意:我使用了版本为3.3.0的maven-resources-plugin和版本为3.2.1的maven-archetype-plugin。
来源: https://maven.apache.org/archetype/maven-archetype-plugin/faq.html#excludes
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-archetype-plugin
3.2.0和maven-resources-plugin
3.2.0再次实际存在。以前的解决方法(<addDefaultExcludes> false </ addDefaultExcludes>
)不起作用,但是使用META-INF / archetype-post-generate.groovy
的解决方案对我完美地起作用了! - Ivan Ponomarev.gitignore
文件也必须重命名为.gitignore.tmpl
,以匹配此解决方案中指定的<include/>
属性的值。或许事后看来很明显,但我花了一些时间才弄清楚。 - Tom这个问题仍然存在于最新的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>
降级 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>
.gitignore
:但是如何使用.gitignore
生成呢? - flungo