Maven原型插件不允许archetype-resources中的.resources通过

vh0rcniy  于 2023-01-20  发布在  Maven
关注(0)|答案(9)|浏览(203)

如何使.gitignore这样的资源成为结果项目的一部分?
1.使用archetype-resources/.gitignore创建原型

  1. mvn install
  2. mvn archetype:generate
    1.结果项目不包含.gitignore

**PS.**我敢肯定它不在那里.

w9apscun

w9apscun1#

这个错误似乎仍然存在于maven原型插件v3.0.1中。对于那些不想降级maven资源插件的人。我设法建立了一个或多或少丑陋的变通方案。
首先将archetype-resources/.gitignore重命名为

__gitignore__

然后在archetype-metadata.xml add中

<requiredProperties>
    <requiredProperty key="gitignore">
        <defaultValue>.gitignore</defaultValue>
    </requiredProperty>
</requiredProperties>

<fileSets>
    <fileSet>
        <directory></directory>
        <includes>
            <include>__gitignore__</include>
        </includes>
    </fileSet>
</fileSets>

生成原型时,maven将首先复制__gitignore__,然后查看__[file]__语法,并将其替换为默认值“.gitignore”

mbjcgjjk

mbjcgjjk2#

这个解决方案适用于即将到来的maven资源插件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>
mitkmikd

mitkmikd3#

fileSet条目添加到src/main/resources/META-INF/maven/archetype-metadata.xml,并使用空目录标记:

<fileSet>
  <directory></directory>
  <includes>
    <include>.gitignore</include>
  </includes>
</fileSet>

这会将包含的文件从src/main/resources/archetype-resources复制到项目根目录。

new9mtju

new9mtju4#

通过启动Maven build on debug(带-X选项)检查您的maven资源插件版本。如果您使用的是2.7,there is a regression where .gitignore files are silently ignored
在这种情况下,您必须在pom.xml中显式使用Python 2.6:

<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <artifactId>maven-resources-plugin</artifactId>
                <version>2.6</version>
            </plugin>
        </plugins>
    </pluginManagement>
</build>
gywdnpxw

gywdnpxw5#

**ARCHETYPE/issues/ARCHETYPE-505**显示这个问题在当前版本的插件和maven中已经彻底被破坏了。没有解决方法可以帮助解决这个问题。

jmp7cifd

jmp7cifd6#

对我来说非常有效的解决方案是使用protetype post install groovy脚本。
在原型项目的resources文件夹中创建一个文件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脚本解决方案。

soat7uwm

soat7uwm7#

在寻找这个问题的解决方案时,我们去了maven-archetype-plugin的FAQ部分,很明显,版本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>
  • 注意:我使用的maven资源插件版本是3.3.0,maven原型插件版本是3.2.1。*

图片来源:https://maven.apache.org/archetype/maven-archetype-plugin/faq.html#excludes

62lalag4

62lalag48#

降级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>
eufgjt7s

eufgjt7s9#

该漏洞仍然存在于最新的maven原型插件2.4和maven资源插件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>

相关问题