Problem creating jar: [...]/target/classes (Is a directory)

    Tue, Aug 13 2013
      

Problema gerando assembly:assembly no Maven

Quando se empacota um .jar no maven através do comando assembly:assembly, dependendo da configuração, o maven gera, além do .jar habitual, um arquivo .zip contendo todas as libs utilizadas pelo projeto. Estava estudano esse comando assembly:assembly, encontrei o seguinte erro:

Embedded error: Problem creating jar: [...]/target/classes (Is a directory)

Percebi que o problema ocorria em projetos sem nenhuma dependência, ou apenas o junit, que é declarado com o escopo test. O que é muito justo, afinal a minha configuração era para gerar o tal .zip com as dependências, como o projeto não tinha nenhuma, o erro já era previsto. Para solucionar adicionei uma tag  para um jar bem pequeno e o comando foi executado com sucesso, ou então simplesmente retirei o comando porque ele não era necessário.

Configurações do projeto

Para adicionar o plugin maven-assembly no projeto, basta declará-lo no pom.xml dizendo qual arquivo possui as configurações do assembly e criar o arquivo package.xml dentro da pasta onde ele se encontra, ex: /src/mais/assembly.

maven-assembly-plugin

<build>
        <plugins>            
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.2-beta-4</version>
                <configuration>
                    <descriptors>
                        <descriptor>${basedir}/src/main/assembly/package.xml</descriptor>
                    </descriptors>
                </configuration>
            </plugin>
        <plugins>
<build>

Arquivo /src/main/assembly/package.xml

<?xml version="1.0" encoding="UTF-8"?>
<assembly>
  dist</id>
  <formats>
    <format>zip</format>
  </formats>
  <fileSets>    
    <fileSet>
      <directory>${basedir}/src/main/resources</directory>
      <outputDirectory>/</outputDirectory>
    </fileSet>
  </fileSets>
  <files>
    <file>
      <source>target/${project.artifactId}-${project.version}.jar</source>
      <outputDirectory>/</outputDirectory>
      <destName>${project.artifactId}.jar</destName>
    </file>
  </files>
  <dependencySets>
    <dependencySet>
      <useProjectArtifact>false</useProjectArtifact>
      <outputDirectory>lib</outputDirectory>
    </dependencySet>
  </dependencySets>
</assembly>

Com essas configurações, ao rodar o comando mvn assembly:assemblyserá criado um pacote .zip dentro da pasta target do projeto contendo o .jar e as libs