Maven 2 assembly com dependencies: jar sob escopo “system” não incluído

Eu estou usando o plugin maven-assembly para criar um jar do meu aplicativo, incluindo suas dependencies da seguinte forma:

 macosx  tar.gz dir     *:jar  lib    

(Eu omiti algumas outras coisas que não estão relacionadas à questão)

Até agora isso funcionou bem porque cria um diretório lib com todas as dependencies. No entanto, recentemente adicionei uma nova dependência cujo escopo é o system e ele não copia para o diretório de saída lib . Eu devo estar faltando algo básico aqui, então eu peço ajuda.

A dependência que acabei de adicionar é:

  sourceforge.jchart2d jchart2d 3.1.0 system ${project.basedir}/external/jchart2d-3.1.0.jar  

A única maneira que consegui include essa dependência foi adicionando o seguinte ao elemento assembly:

   external/jchart2d-3.1.0.jar lib   

No entanto, isso me obriga a mudar o pom eo arquivo de assembly sempre que esse jar é renomeado, se alguma vez. Além disso, parece errado.

Eu tentei com runtime nos dependencySets e sourceforge.jchart2d:jchart2d sem sorte.

Então, como você inclui um jar no escopo do system para o seu arquivo de assembly no maven 2?

Muito obrigado

    Não me surpreende que as dependencies do escopo do sistema não sejam adicionadas (afinal, as dependencies com um escopo do sistema devem ser explicitamente fornecidas por definição). Na verdade, se você realmente não quer colocar essa dependência em seu repository local (por exemplo, porque você quer distribuí-lo como parte de seu projeto), é isso que eu faria:

    • Eu colocaria a dependência em um “repository do sistema de arquivos” local para o projeto.
    • Eu declararia esse repository no meu pom.xml assim:

         my file://${basedir}/my-repo   
    • Eu apenas declararia o artefato sem o escopo do system , isso é apenas uma fonte de problemas:

        sourceforge.jchart2d jchart2d 3.1.0  

    Não tenho 100% de certeza de que isso atenderá às suas necessidades, mas acho que é uma solução melhor do que usar o escopo do sistema.

    Atualização: Eu deveria ter mencionado isso na minha resposta original e estou corrigindo agora. Para instalar uma biblioteca de terceiros no repository baseado em arquivo, use install:install-file com o parâmetro localRepositoryPath :

     mvn install:install-file -Dfile= \ -DgroupId= \ -DartifactId= \ -Dversion= \ -Dpackaging= \ -DlocalRepositoryPath= 

    Você pode colar isso como em um shell * nix. No windows, remova o ” \ ” e coloque tudo em uma única linha.

    Btw você pode automatizá-lo e torná-lo uma parte de sua construção maven. A seguir, você instalará seu jar em seu repository local antes da compilation:

       org.apache.maven.plugins maven-install-plugin   hack-binary validate  ${basedir}/lib/your-lib.jar default your-group your-artifact 0.1 jar true   install-file     

    Eu acho solução fácil no caso de você criar jar

      org.apache.maven.plugins maven-war-plugin 2.1.1    dependencies/mydep WEB-INF/lib true  **/*.jar      

    Você também pode manipular isso através da adição de um dependencySet suplementar em seus dependencySets.

      system  *:jar  lib  

    O melhor seria usar um Repository Manager (como Nexus, Artifactory, Archiva) e instalar esse tipo de dependência em um determinado repository. Depois disso, você pode usar coisas como uma dependência simples. Isso simplificará sua vida.

    Documentos: https://maven.apache.org/plugins/maven-assembly-plugin/assembly.html

    Uma solução simples para isso é adicioná-lo ao repository maven local

    Uma maneira de fazer isso é através dos comandos mvn install, como sugerido no post anterior.

    Outra maneira fácil é: 1) Em seu eclipse ide clique com o botão direito no projeto selecione a opção Maven. 2) Selecione Instalar ou implantar um artefato em uma opção do repository maven e clique em Avançar. 3) Clique em Navegar ao lado da checkbox de seleção Arquivo de Artefato e selecione seu arquivo jar 4) Insira o GroupId e o ArtifactId e a versão assegure-se de que gerar pom & create checksum sejam verificados e o pacote seja jar

    Clique no acabamento, Wallah !!! seu trabalho é feito o jar é adicionado em seu repository local, que você pode definir no diretório setting.xml ou m2

    Agora basta adicionar a dependência do maven simples de acordo com a versão do GroupId, ArtifactId & jar que você inseriu de acordo com a importação e é isso que o seu jar externo será empacotado pelo maven.

    Editado: Desculpe que eu não percebi alx também mencionado sobre a solução alternativa do ciclo de vida.

      org.apache.maven.plugins maven-install-plugin   hack-binary clean  ${basedir}/lib/your-lib.jar default your-group your-artifact 0.1 jar true   install-file     

    Com base na solução fornecida por alx, você pode executar a etapa do arquivo de instalação na fase limpa. mas como a fase de limpeza não está no ciclo de vida padrão, você precisa executar o mvn clean na primeira vez para garantir que o jar esteja pronto no repository local.

    ex: mvn clean; pacote mvn

    funcionou de maneira mais fácil na minha solução:

    remover da sua dependência:

      tiago.medici eureka 0.0.1  

    Em seguida, adicione também o plug-in maven-install no pom.xml.

      org.apache.maven.plugins maven-install-plugin   install-external clean  ${basedir}/external/tiago.medici-0.0.1.jar default tiago.medici eureka 0.0.1 jar true   install-file