Maven archetype插件不允许在archetype-resources中使用.resources

时间:2011-11-02 13:22:27

标签: maven-3 maven-archetype

有谁知道如何让像.gitignore这样的资源成为最终项目的一部分?

  1. 使用archetype-resources / .gitignore
  2. 创建原型
  3. mvn install
  4. mvn archatype:generate
  5. 生成的项目不包含.gitignore
  6. PS。我确定它不存在。

8 个答案:

答案 0 :(得分:17)

即将发布的maven-resources-plugin v3.0.0(在发布此版本时尚未发布;当前仍为2.7)的解决方案似乎比阻止版本升级更好:

    private void btRecOn_Click(object sender, EventArgs e)
    {
        if (serialPort1.IsOpen == true)             // COMport is open                
            Text = recon;             // string recon = "recording on"
            serialPort1.Write(Text);  // sends text "recording on" to arduino
    }

    private void SerialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        RxString = serialPort1.ReadExisting();            // reads data from serial port
        this.Invoke(new EventHandler(trataDadoRecebido)); // calls another thread to write data in text
    }   

    private void trataDadoRecebido(object sender, EventArgs e)
    {
        textBoxReceber.AppendText(RxString);         
    }

答案 1 :(得分:11)

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

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

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

答案 2 :(得分:9)

通过在调试时启动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>

答案 3 :(得分:6)

这个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]__语法,并将其替换为默认值&#34; .gitignore&#34;

答案 4 :(得分:2)

https://issues.apache.org/jira/projects/ARCHETYPE/issues/ARCHETYPE-505表明,当前版本的插件和Maven已彻底破坏了这一点。没有变通办法了。

答案 5 :(得分:0)

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

答案 6 :(得分:0)

该bug仍然在最新的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>

答案 7 :(得分:0)

最适合我的解决方案是使用原型安装后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脚本解决方案。