Eu quero que o jar esteja em uma lib de terceiros no controle de origem e vincule a ele pelo caminho relativo do arquivo pom.xml.
Se você realmente deseja isso (entenda, se você não pode usar um repositório corporativo), meu conselho seria usar um "repositório de arquivos" local para o projeto e não usar uma system
dependência de escopo. O system
escopo deve ser evitado, tais dependências não funcionam bem em muitas situações (por exemplo, na montagem), pois causam mais problemas do que benefícios.
Portanto, declare um repositório local para o projeto:
<repositories>
<repository>
<id>my-local-repo</id>
<url>file://${project.basedir}/my-repo</url>
</repository>
</repositories>
Instale sua biblioteca de terceiros usando install:install-file
o localRepositoryPath
parâmetro:
mvn install:install-file -Dfile=<path-to-file> -DgroupId=<myGroup> \
-DartifactId=<myArtifactId> -Dversion=<myVersion> \
-Dpackaging=<myPackaging> -DlocalRepositoryPath=<path>
Atualização: parece que install:install-file
ignora o localRepositoryPath
quando estiver usando a versão 2.2 do plugin. No entanto, ele funciona com a versão 2.3 e posterior do plug-in. Portanto, use o nome completo do plug-in para especificar a versão:
mvn org.apache.maven.plugins:maven-install-plugin:2.3.1:install-file \
-Dfile=<path-to-file> -DgroupId=<myGroup> \
-DartifactId=<myArtifactId> -Dversion=<myVersion> \
-Dpackaging=<myPackaging> -DlocalRepositoryPath=<path>
documentação do maven-install-plugin
Por fim, declare-o como qualquer outra dependência (mas sem o system
escopo):
<dependency>
<groupId>your.group.id</groupId>
<artifactId>3rdparty</artifactId>
<version>X.Y.Z</version>
</dependency>
Esta é a IMHO uma solução melhor do que usar um system
escopo, pois sua dependência será tratada como um bom cidadão (por exemplo, será incluída em uma assembléia e assim por diante).
Agora, devo mencionar que o "caminho certo" para lidar com essa situação em um ambiente corporativo (talvez não seja o caso aqui) seria usar um repositório corporativo.
localRepositoryPath
...basedir/./my-local-repo
com um único.
.Usando o
system
escopo.${basedir}
é o diretório do seu pom.No entanto, é aconselhável que você instale seu jar no repositório e não o comprometa no SCM - afinal, é isso que o maven tenta eliminar.
fonte
Este é outro método, além da minha resposta anterior em Posso adicionar jars ao maven 2 build classpath sem instalá-los?
Isso contornará o limite ao usar compilações de vários módulos, especialmente se o JAR baixado for referenciado em projetos filhos fora do pai. Isso também reduz o trabalho de configuração criando os arquivos POM e SHA1 como parte da compilação. Ele também permite que o arquivo resida em qualquer lugar do projeto sem corrigir os nomes ou seguir a estrutura do repositório maven.
Isso usa o maven-install-plugin. Para que isso funcione, você precisa configurar um projeto com vários módulos e ter um novo projeto representando a compilação para instalar arquivos no repositório local e garantir que seja o primeiro.
Seu projeto com vários módulos pom.xml ficaria assim:
O arquivo repository / pom.xml conterá as definições para carregar os JARs que fazem parte do seu projeto. A seguir, alguns trechos do arquivo pom.xml.
O empacotamento pom evita que ele faça testes ou compile ou gere qualquer arquivo jar. A descrição do pom.xml está na seção de construção, onde o maven-install-plugin é usado.
Para instalar mais de um arquivo, basta adicionar mais execuções.
fonte
Isso está funcionando para mim: digamos que tenho essa dependência
Em seguida, adicione o caminho da classe para a dependência do sistema manualmente, como este
Configuração completa:
fonte
Eu escrevi anteriormente sobre um padrão para fazer isso.
É muito semelhante à solução proposta por Pascal, embora mova todas essas dependências para um módulo de repositório dedicado, para que você não precise repeti-lo em todos os lugares em que a dependência é usada se for uma compilação de vários módulos.
fonte
Basicamente, adicione isso ao pom.xml:
fonte
nós mudamos para gradle e isso funciona muito melhor em gradle;). apenas especificamos uma pasta na qual podemos colocar jarros para situações temporárias como essa. Ainda temos a maioria dos nossos jarros definidos na seção de gerenciamento de dependência típica (ou seja, o mesmo que maven). Esta é apenas mais uma dependência que definimos.
então basicamente agora podemos colocar qualquer jar que quisermos em nosso diretório lib para testes temporários, se ele não estiver em um repositório maven em algum lugar.
fonte
Uma pequena adição à solução postada por Pascal
Quando segui esta rota, recebi um erro no maven ao instalar ojdbc jar.
Depois de adicionar -DpomFile, o problema foi resolvido.
fonte
Você pode usar o eclipse para gerar um arquivo Jar executável: arquivo Export / Jar executável
fonte