Grégory Joseph created ARCHETYPE-458:
----------------------------------------

             Summary: Ability to generate empty directories... with Git or 
other excluded files.
                 Key: ARCHETYPE-458
                 URL: https://jira.codehaus.org/browse/ARCHETYPE-458
             Project: Maven Archetype
          Issue Type: Bug
    Affects Versions: 2.2
            Reporter: Grégory Joseph


Ok, so following ARCHETYPE-157, empty directories can be generated by 
configuring {{includeEmptyDirs}} for the {{maven-resources-plugin}}. However, 
if one is using Git (or presumably other VCS behaving similarly), really empty 
directories can't really be source-controlled.

I was hoping to be able to use the usual git trick of having 
{{.empty-placeholder}} files in my archetype sources. That works, those files 
are in the archetype jar, even without reconfiguring the resources plugin. My 
next step was thus to configure my {{fileSet}} as such:
{code}
<fileSet encoding="UTF-8">
          <directory>src/main/webapp/</directory>
          <excludes>
            <exclude>**/.emptydir-placeholder</exclude>
          </excludes>
          <includes>
            <include>**/*</include>
          </includes>
        </fileSet>
{code}

However, this doesn't work, for a combination of two reasons, I believe:
* The archetype jar does not contain *directory* entries when files are in 
these directories (regardless of {{includeEmptyDirs}})
* The archetype:generate mojo copies a fileset by looking directly are the zip 
entries, not by somehow normalizing those entries. So it sees no entry for my 
"empty" directory {{/foo}}, but only the one {{/foo/.empty-placeholder}} entry, 
which is excluded. 
As a consequence, the empty directory is, well, excluded and not generated.

I haven't found a way to force the addition of directory entries in the 
archetype jar ({{archetype:jar}}'s configuration is pretty limited, and seems 
to generate the artifact on its own (straight to a ZipOutputStream)

A workaround is to not exclude the {{**/.emptydir-placeholder}} files in the 
archetype descriptor, but rather in the {{<resources>}} section of the build - 
so I can keep them in my Git-managed sources, but they're not in the archetype 
artifact. This somehow feels less elegant to me, but I'll give it a go anyway.
{code}
<build>
  <resources>
    <resource>
        <directory>src/main/resources</directory>
        <excludes>
          <exclude>**/.emptydir-placeholder</exclude>
        </excludes>
      </resource>
...
{code}



--
This message was sent by Atlassian JIRA
(v6.1.6#6162)

Reply via email to