Problemas de abordagens populares
A maioria das respostas encontradas na Internet sugere que você instale a dependência no seu repositório local ou especifique um escopo de "sistema" no pom
e distribua a dependência com a fonte do seu projeto. Mas essas duas soluções são realmente falhas.
Por que você não deve aplicar a abordagem "Instalar no repositório local"
Quando você instala uma dependência em seu repositório local, ela permanece lá. Seu artefato de distribuição funcionará bem desde que tenha acesso a este repositório. O problema é que, na maioria dos casos, esse repositório residirá em sua máquina local, portanto não haverá maneira de resolver essa dependência em qualquer outra máquina. Claramente, fazer com que seu artefato dependa de uma máquina específica não é uma maneira de lidar com as coisas. Caso contrário, essa dependência precisará ser instalada localmente em todas as máquinas que trabalham com esse projeto, o que não é melhor.
Por que você não deve aplicar a abordagem "System Scope"
Os jars dos quais você depende com a abordagem "System Scope" não são instalados em nenhum repositório ou anexados aos seus pacotes de destino. É por isso que seu pacote de distribuição não terá uma maneira de resolver essa dependência quando usado. Acredito que esse foi o motivo pelo qual o uso do escopo do sistema ficou obsoleto. De qualquer forma, você não deseja confiar em um recurso obsoleto.
A solução estática de repositório no projeto
Depois de colocar isso no seu pom
:
<repository>
<id>repo</id>
<releases>
<enabled>true</enabled>
<checksumPolicy>ignore</checksumPolicy>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
<url>file://${project.basedir}/repo</url>
</repository>
para cada artefato com um ID de grupo do formulário, o x.y.z
Maven incluirá o seguinte local dentro do diretório do projeto em sua busca por artefatos:
repo/
| - x/
| | - y/
| | | - z/
| | | | - ${artifactId}/
| | | | | - ${version}/
| | | | | | - ${artifactId}-${version}.jar
Para elaborar mais sobre isso, você pode ler esta postagem do blog .
Use o Maven para instalar para projetar repo
Em vez de criar essa estrutura manualmente, recomendo usar um plug-in Maven para instalar seus jars como artefatos. Portanto, para instalar um artefato em um repositório no projeto na repo
pasta, execute:
mvn install:install-file -DlocalRepositoryPath=repo -DcreateChecksum=true -Dpackaging=jar -Dfile=[your-jar] -DgroupId=[...] -DartifactId=[...] -Dversion=[...]
Se você escolher essa abordagem, poderá simplificar a declaração do repositório em pom
:
<repository>
<id>repo</id>
<url>file://${project.basedir}/repo</url>
</repository>
Um script auxiliar
Como executar o comando de instalação para cada biblioteca é meio irritante e definitivamente propenso a erros, eu criei um script utilitário que instala automaticamente todos os jars de uma lib
pasta para um repositório de projetos, enquanto resolve automaticamente todos os metadados (groupId, artifactId e etc.) de nomes de arquivos. O script também imprime as dependências xml para você copiar e colar no seu pom
.
Inclua as dependências no seu pacote de destino
Quando você criar seu repositório no projeto, terá resolvido um problema de distribuição das dependências do projeto com sua origem, mas desde então o artefato de destino do seu projeto dependerá de jarros não publicados, portanto, quando você instalar para um repositório, ele terá dependências não resolvíveis.
Para superar esse problema, sugiro incluir essas dependências no pacote de destino. Isso você pode fazer com o Plug - in Assembly ou melhor com o Plug-in OneJar . A documentação oficial do OneJar é fácil de entender.