Como adicionar arquivos jar locais a um projeto Maven?

1171

Como adiciono arquivos jar locais (ainda não parte do repositório Maven) diretamente nas fontes de biblioteca do meu projeto?

Praneel PIDIKITI
fonte
1
Olá @Praneel PIDIKITI, Você pode alterar a resposta aceita para a que tiver mais votos?
null
1
@nslntmnx Isso não vai ser melhor solução, como toda a solução tem desvantagens stackoverflow.com/questions/364114/...
Paul Verest
Se suas bibliotecas forem atualizadas ou estendidas ocasionalmente, veja esta resposta em Quero carregar todos os JARs da minha pasta de projeto libs com o maven de uma maneira "pomposa", evitando assim uma pasta de repositório adicional e linhas ou install-filescripts complicados de cmd .
GeroldBroser restabelece Monica

Respostas:

698

Instale o JAR no seu repositório Maven local da seguinte maneira:

mvn install:install-file \
   -Dfile=<path-to-file> \
   -DgroupId=<group-id> \
   -DartifactId=<artifact-id> \
   -Dversion=<version> \
   -Dpackaging=<packaging> \
   -DgeneratePom=true

Onde cada um se refere a:

<path-to-file>: o caminho para o arquivo a ser carregado, por exemplo → c:\kaptcha-2.3.jar

<group-id>: o grupo em que o arquivo deve ser registrado, por exemplo, → com.google.code

<artifact-id>: o nome do artefato para o arquivo, por exemplo, → kaptcha

<version>: a versão do arquivo, por exemplo, → 2.3

<packaging>: a embalagem do arquivo, por exemplo, → jar

Referência

user373455
fonte
7
As instruções para instalar no meu build tinham tudo, exceto a parte generatePom. Isso parece ser crucial.
Jason D #
4
<path-to-file> o que isso significa? Como em C: /Users/XXX/WorkspaceDocx/maven/src/main/resources/myJar.jar ...... ou podemos fazer $ {project.basedir} /src/main/resources/myJar.jar
Igor Beaufils
17
A resposta não menciona um README ou que os frascos são trazidos. No entanto, se o projeto levar os frascos, você poderá colocar o repositório no projeto, como mencionado aqui stackoverflow.com/a/36602256/1000011 , não será necessário um README, pois o projeto funcionará como se os frascos estavam na central maven sem etapas manuais extras.
opticyclic
8
@opticyclic, seu comentário precisa de mais votos positivos, ou esta resposta precisa ser editada. É uma receita para o desastre para iniciantes que não percebem que a instalação no repositório local do Maven não incluiria para todos os outros.
28816 Mike S S
3
Guia
Nick Graham
1430

Você pode adicionar dependências locais diretamente (como mencionado no projeto build maven com bibliotecas de propriedades incluídas ) assim:

<dependency>
    <groupId>com.sample</groupId>
    <artifactId>sample</artifactId>
    <version>1.0</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/src/main/resources/Name_Your_JAR.jar</systemPath>
</dependency>

Atualizar

Em novas versões, esse recurso é marcado como obsoleto, mas ainda está funcionando e ainda não foi removido (você vê apenas um aviso no log durante o início do processo) Foi levantado um problema no grupo maven sobre este https://issues.apache.org/jira/browse/MNG-6523 (Você pode participar e descrever por que esse recurso é útil em alguns casos). Espero que esse recurso permaneça lá!

Se você está me perguntando, desde que o recurso não seja removido, eu uso isso para fazer dependência de apenas um arquivo jar impertinente no meu projeto que não se encaixa no repositório. Se esse recurso for removido, bem, há muitas boas respostas aqui, das quais posso escolher mais tarde!

Alireza Fattahi
fonte
49
Há momentos em que você deseja testar especificamente um jar antigo, por exemplo, e acho que essa resposta é adequada. É o que eu precisava. Upvoted
John Lockwood
36
Tão agradável e fácil quanto parece, esta solução tem o problema de que yourJar.jar não será incluído em um arquivo WAR para seu aplicativo.
Matthias
40
A solução acima não funciona mais, ela retorna: "'dependencies.dependency.systemPath' para xx.jar não deve apontar para arquivos no diretório do projeto" Isso já foi tratado em stackoverflow.com/questions/10935135/…
sarah .ferguson
8
Nesta resposta, não são a artifactIde groupIdda forma errada?
8135 theonlygusti
5
De acordo com Maven docu ( maven.apache.org/guides/introduction/… ): Nota importante: Isso está marcado como obsoleto.
Agassner
142

Em primeiro lugar, gostaria de dar crédito por esta resposta a um usuário anônimo do Stack Overflow - tenho certeza de que já vi uma resposta semelhante aqui antes - mas agora não consigo encontrá-la.

A melhor opção para ter arquivos JAR locais como uma dependência é criar um repositório Maven local. Esse repositório nada mais é do que uma estrutura de diretórios adequada com arquivos pom nele.

Para o meu exemplo: eu tenho meu projeto mestre no ${master_project}local e o subprojeto1 está ativado ${master_project}/${subproject1}.

Então eu criar um repositório Maven em: ${master_project}/local-maven-repo.

No arquivo pom no subprojeto1 localizado em ${master_project}/${subproject1}/pom.xml, o repositório precisa ser especificado, o que levaria o caminho do arquivo como um parâmetro de URL:

<repositories>
    <repository>
        <id>local-maven-repo</id>
        <url>file:///${project.parent.basedir}/local-maven-repo</url>
    </repository>
</repositories>

A dependência pode ser especificada como para qualquer outro repositório. Isso torna seu repositório pom independente. Por exemplo, quando o JAR desejado estiver disponível no Maven central, você só precisará excluí-lo do seu repositório local e ele será retirado do repositório padrão.

    <dependency>
        <groupId>org.apache.felix</groupId>
        <artifactId>org.apache.felix.servicebinder</artifactId>
        <version>0.9.0-SNAPSHOT</version>
    </dependency>

A última coisa, mas não menos importante, é adicionar o arquivo JAR ao repositório local usando a opção -DlocalRepositoryPath da seguinte maneira:

mvn org.apache.maven.plugins:maven-install-plugin:2.5.2:install-file  \
    -Dfile=/some/path/on/my/local/filesystem/felix/servicebinder/target/org.apache.felix.servicebinder-0.9.0-SNAPSHOT.jar \
    -DgroupId=org.apache.felix -DartifactId=org.apache.felix.servicebinder \
    -Dversion=0.9.0-SNAPSHOT -Dpackaging=jar \
    -DlocalRepositoryPath=${master_project}/local-maven-repo

Depois que o arquivo JAR é instalado, seu repositório Maven pode ser confirmado em um repositório de códigos, e toda a configuração é independente do sistema. ( Exemplo de trabalho no GitHub ).

Concordo que ter JARs comprometidos com repo código fonte não é uma boa prática, mas na vida real, soluções rápidas e sujas às vezes são melhores que um repo Nexus completo para hospedar um JAR que você não pode publicar.

JJ Roman
fonte
Diretório relativo local como um repo maven ... Ajudou
sura2k
4
Se você quiser fazer isso em pom.xml, veja baeldung.com/install-local-jar-with-maven
Kai Wang
@Kai Wang Esta solução funciona muito melhor! talvez você devesse adicionar isso como resposta.
Lockwobr #
7
Como ${project.parent.basedir}não parece resolver nada hoje em dia, usei ${project.basedir}/..e trabalhei perfeitamente.
O Empalador
1
Uma dica: verifique $ HOME / .m2 / settings.xml , para evitar que "local-maven-repo" seja espelhado por settings / mirrors / mirror <mirrorOf>*</mirrorOf>.
btpka3
125

Crie uma nova pasta, digamos local-maven-repona raiz do seu projeto Maven.

Basta adicionar um repositório local dentro <project>do seu pom.xml:

<repositories>
    <repository>
        <id>local-maven-repo</id>
        <url>file:///${project.basedir}/local-maven-repo</url>
    </repository>
</repositories>

Em seguida, para cada jar externo que você deseja instalar, acesse a raiz do seu projeto e execute:

mvn deploy:deploy-file -DgroupId=[GROUP] -DartifactId=[ARTIFACT] -Dversion=[VERS] -Durl=file:./local-maven-repo/ -DrepositoryId=local-maven-repo -DupdateReleaseInfo=true -Dfile=[FILE_PATH]
Anthony O.
fonte
16
Esta é a única resposta correta aqui, pois criará seu repositório corretamente ao usar o deploy.
Opticyclic
Essa abordagem funcionaria se o código fosse implantado usando um servidor de criação de IC? Parece que construções automatizadas não teriam acesso à dependência.
Wallace Howery 08/0318
2
@ user2748659 yes se nos servidores de criação de IC a pasta local-maven-repoestiver incluída (como filho neste exemplo) na pasta de origem
Anthony O.
3
Esta resposta é o que funcionou para mim. Para um projeto compartilhado, ter o repositório no diretório do projeto e adicionar ao controle de versão garante que quem fizer check-out do projeto não terá dependências ausentes. Se você tiver muitas dependências, um repositório remoto compartilhado provavelmente é uma solução melhor; caso contrário, manter o repositório no diretório do projeto é perfeitamente adequado.
Aquarelle
2
Observe que, para fazer isso, pode ser necessário adicionar -Dpackaging = jar. Caso contrário, você receberá "as informações do artefato estão incompletas ou inválidas: o pacote está ausente".
J Woodchuck
43

Gostaria dessa solução - use maven-install-pluginno arquivo pom:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-install-plugin</artifactId>
    <version>2.5.2</version>
    <executions>
        <execution>
            <phase>initialize</phase>
            <goals>
                <goal>install-file</goal>
            </goals>
            <configuration>
                <file>lib/yourJar.jar</file>
                <groupId>com.somegroup.id</groupId>
                <artifactId>artefact-id</artifactId>
                <version>x.y.z</version>
                <packaging>jar</packaging>
            </configuration>
        </execution>
    </executions>
</plugin>

Nesse caso, você pode executar mvn initializee o jar será instalado no repositório maven local. Agora, este jar está disponível durante qualquer etapa do maven nesta máquina (não se esqueça de incluir essa dependência como qualquer outra dependência do maven no pom com <dependency></dependency>tag). Também é possível vincular a instalação do jar não para a initializeetapa, mas para qualquer outra etapa que você desejar.

sphinks
fonte
2
Isso funciona bem para mim, mas somente se eu executar mvn initializeantes mvn package: não posso mvn initialize packageou então ele tenta baixar o JAR do repositório central. Por que é isso? Eu pensei que iria executar esses objetivos / fases em ordem.
Davids
1
Na verdade, eles devem ser executados em ordem. Dê uma olhada na lista do ciclo de vida padrão: maven.apache.org/guides/introduction/… Você pode usar outra etapa para ligar.
Sphinks
2
Eu tentei todos os métodos, mas no final tive que recorrer a essa solução. A principal razão é que eu queria poder construir os pacotes localmente no modo offline. Se eu o declarasse como uma dependência de um repositório definido localmente, isso sempre seria considerado apenas mais um repositório on-line e a construção do maven reclamaria de não multar o artefato. Esta solução funciona bem para todos os casos.
Mauli
2
Eu acho que é melhor usar a fase limpa, porque a inicialização será executada sempre que usarmos o pacote mvn quando for desnecessário. Finalmente, se precisarmos apenas gerar o jar / war, podemos usar diretamente o pacote mvn clean .
Deoxyseia
" Também é possível vincular a instalação do jar para não inicializar a etapa, mas qualquer outra etapa que você goste. " Não é necessariamente verdadeira. Se a dependência ainda não estiver no repositório e for usada uma fase que vem depois de uma fase que resolve dependências (por exemplo compile), a compilação falhará.
GeroldBroser restabelece Monica
29
<dependency>
    <groupId>group id name</groupId>
    <artifactId>artifact name</artifactId>
    <version>version number</version>
    <scope>system</scope>
    <systemPath>jar location</systemPath>
</dependency>
Satish Karuturi
fonte
6
<scope>systemestá obsoleto agora.
GeroldBroser restabelece Monica
@GeroldBroser - ok. o que podemos usar em vez disso?
MasterJoe2
2
@ MasterJoe2 Como também mencionado na resposta aceita, install:install-file o artefato para o repositório local e use-o como uma dependência "normal" (com escopo padrão compile) ou use uma solução de repositório no projeto .
GeroldBroser restabelece Monica 10/05/19
14

A maneira realmente rápida e suja é apontar para um arquivo local:

<dependency>
      <groupId>sample</groupId>  
       <artifactId>com.sample</artifactId>  
       <version>1.0</version> 
      <scope>system</scope>
      <systemPath>C:\DEV\myfunnylib\yourJar.jar</systemPath>
</dependency>

No entanto, isso permanecerá apenas na sua máquina (obviamente), pois, para compartilhar, geralmente faz sentido usar um arquivo m2 adequado (nexus / artifactory) ou se você não possui nenhum desses itens ou não deseja configurar um maven local arquivo estruturado e configure um "repositório" em seu pom: local:

<repositories>
    <repository>
        <id>my-local-repo</id>
        <url>file://C:/DEV//mymvnrepo</url>
    </repository>
</repositories>

controlo remoto:

<repositories>
    <repository>
        <id>my-remote-repo</id>
        <url>http://192.168.0.1/whatever/mavenserver/youwant/repo</url>
    </repository>
</repositories>

para isso, também é possível um caminho relativo usando a variável basedir:

<url>file:${basedir}</url>
fl0w
fonte
Para URLs de repositório local, eles podem ser relativos ou devem ser absolutos?
Dragas
@ Dragas eu não tentei, por favor, deixe-nos saber se você fez.
Fl0w # 8/18
1
Sim, aparentemente você precisa usar <url>file:${basedir}</url>como URL base.
Dragas
11

Adicione seu próprio JAR local no arquivo POM e use-o no maven build.

mvn install:install-file -Dfile=path-to-jar -DgroupId=owngroupid -DartifactId=ownartifactid -Dversion=ownversion -Dpackaging=jar

Por exemplo:

mvn install:install-file -Dfile=path-to-jar -DgroupId=com.decompiler -DartifactId=jd-core-java -Dversion=1.2 -Dpackaging=jar

Em seguida, adicione-o ao POM assim:

insira a descrição da imagem aqui

Tummidi Phani Kumar
fonte
Eu recebo um erro Falha ao instalar o artefato (acesso negado). Como posso resolver isso? @Aurasphere
Ramzah Rehman
1
@RamzahRehman tente abrir o prompt de comando com privilégios admi clicando o botão direito e, em seguida, escolher "Executar como administrador"
Aurasphere
9

Uma maneira é fazer o upload para o seu próprio gerenciador de repositório Maven (como o Nexus). É uma boa prática ter um gerenciador de repositório próprio de qualquer maneira.

Outra maneira interessante que vi recentemente é incluir o Maven Install Plugin no seu ciclo de vida de construção: Você declara no POM para instalar os arquivos no repositório local. É uma sobrecarga pequena, mas pequena, e nenhuma etapa manual envolvida.

http://maven.apache.org/plugins/maven-install-plugin/install-file-mojo.html

Puce
fonte
4
Termine mudando para gradle. Não funciona Se o jar local for definido como dependências, o maven não executará plug-ins antes de resolver as dependências, uma instalação manual é inevitável. encontrou uma divergência sobre esta situação: stackoverflow.com/questions/5951999/…
xinthink 15/15
6

Outro caso interessante é quando você deseja ter em seu projeto frascos de maven privados. Convém manter os recursos do Maven para resolver dependências transitivas. A solução é bastante fácil.

  1. Crie uma pasta libs no seu projeto
  2. Adicione as seguintes linhas ao seu arquivo pom.xml

    <properties><local.repository.folder>${pom.basedir}/libs/</local.repository.folder>
    </properties>
    
    <repositories>
       <repository>
            <id>local-maven-repository</id>
            <url>file://${local.repository.folder}</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
       </repository>
    </repositories>
  3. Abra a pasta .m2 / repository e copie a estrutura de diretórios do projeto que você deseja importar para a pasta libs .

Por exemplo, suponha que você queira importar a dependência

<dependency>
    <groupId>com.mycompany.myproject</groupId>
    <artifactId>myproject</artifactId>
    <version>1.2.3</version>
</dependency>

Basta ir em .m2 / repository e você verá a seguinte pasta

com / minhaempresa / meuprojeto / 1.2.3

Copie tudo na sua pasta libs (novamente, incluindo as pastas em .m2 / repository ) e pronto.

Jean Valjean
fonte
6

linha de comando :

mvn install:install-file -Dfile=c:\kaptcha-{version}.jar -DgroupId=com.google.code
-DartifactId=kaptcha -Dversion={version} -Dpackaging=jar
Hassani
fonte
5

Parte importante da dependência é: $ {pom.basedir} (em vez de apenas $ {basedir})

<dependency>
    <groupId>org.example</groupId>
    <artifactId>example</artifactId>
    <version>1.0</version>
    <scope>system</scope>
    <systemPath>${pom.basedir}/src/lib/example.jar</systemPath>
</dependency>
kolle_86
fonte
4

Eu acho que uma solução melhor para esse problema é usar o maven-install-plugin para instalar automaticamente os arquivos no momento da instalação. É assim que eu o configurei para o meu projeto.

Primeiro, adicione o caminho (onde você armazena os .jars locais) como uma propriedade.

<properties>
    <local.sdk>/path/to/jar</local.sdk>
</properties>

Em seguida, pluginsadicione um plug-in para instalar os jars ao compilar.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-install-plugin</artifactId>
    <version>2.5.2</version>
    <executions>
        <execution>
            <id>1</id>
            <phase>initialize</phase>
            <goals>
                <goal>install-file</goal>
            </goals>
            <configuration>
                <groupId>com.local.jar</groupId> 
                <artifactId>appengine-api</artifactId>
                <version>1.0</version>
                <packaging>jar</packaging>
                <file>${local.sdk}/lib/impl/appengine-api.jar</file>
            </configuration>
        </execution>
        <execution>
            <id>appengine-api-stubs</id>
            <phase>initialize</phase>
            <goals>
                <goal>install-file</goal>
            </goals>
            <configuration>
                <groupId>com.local.jar</groupId>
                <artifactId>appengine-api-stubs</artifactId>
                <version>1.0</version>
                <packaging>jar</packaging>
                <file>${local.sdk}/lib/impl/appengine-api-stubs.jar</file>
            </configuration>
        </execution>
    </executions>
</plugin>

Finalmente, nas dependências, você pode adicionar os jars

<dependency>
    <groupId>com.local.jar</groupId>
    <artifactId>appengine-api</artifactId>
    <version>1.0</version>
</dependency>

<dependency>
    <groupId>com.local.jar</groupId>
    <artifactId>appengine-api-stubs</artifactId>
    <version>1.0</version>
    <scope>test</scope>
</dependency>

Configurando seu projeto assim, o projeto continuará sendo construído mesmo quando você o levar para outro computador (já que ele possui todos os arquivos jar no caminho especificado pela propriedade local.sdk).

Para groupIdusar um nome exclusivo, apenas para garantir que não haja conflitos.

Agora, quando você mvn installou mvn testos frascos locais serão adicionados automaticamente.

Sudara
fonte
3

A maneira preferida seria criar seu próprio repositório remoto.

Veja aqui para detalhes sobre como fazê-lo. Dê uma olhada na seção ' Upload para um repositório remoto '.

Simeon
fonte
3

Quero compartilhar um código no qual você possa carregar uma pasta cheia de potes. É útil quando um provedor não possui um repositório público e você precisa adicionar muitas bibliotecas manualmente. Decidi criar um .bat em vez de chamar diretamente para o maven, pois poderia haver erros de falta de memória. Foi preparado para um ambiente Windows, mas é fácil adaptá-lo ao SO Linux:

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import java.util.jar.Attributes;
import java.util.jar.JarFile;
import java.util.jar.Manifest;

public class CreateMavenRepoApp {

    private static final String OCB_PLUGIN_FOLDER = "C://your_folder_with_jars";

    public static void main(String[] args) throws IOException {

    File directory = new File();
    //get all the files from a directory
    PrintWriter writer = new PrintWriter("update_repo_maven.bat", "UTF-8");
    writer.println("rem "+ new Date());  
    File[] fList = directory.listFiles();
    for (File file : fList){
        if (file.isFile()){               
        String absolutePath = file.getAbsolutePath() ;
        Manifest  m = new JarFile(absolutePath).getManifest();
        Attributes attributes = m.getMainAttributes();
        String symbolicName = attributes.getValue("Bundle-SymbolicName");

        if(symbolicName!=null &&symbolicName.contains("com.yourCompany.yourProject")) {
            String[] parts =symbolicName.split("\\.");
            String artifactId = parts[parts.length-1];
            String groupId = symbolicName.substring(0,symbolicName.length()-artifactId.length()-1);
            String version = attributes.getValue("Bundle-Version");
            String mavenLine= "call mvn org.apache.maven.plugins:maven-install-plugin:2.5.1:install-file -Dfile="+ absolutePath+" -DgroupId="+ groupId+" -DartifactId="+ artifactId+" -Dversion="+ version+" -Dpackaging=jar ";
            writer.println(mavenLine);          
        }

        }
    }
    writer.close();
    }

}

Depois de executar este main a partir de qualquer IDE, execute o update_repo_maven.bat.

Luis Muzikant
fonte
Seu código String symbolicName = attributes.getValue("Bundle-SymbolicName"); if(symbolicName!=null &&symbolicName.contains("com.yourCompany.yourProject"))parece indicar que apenas os frascos personalizados serão suportados. Não é disso que precisamos: em vez disso, um monte de potes de terceiros. Você tem sugestões de como instalar qualquer jar dessa maneira?
Javadba 27/11
Eu fixo o seu código: i colocar uma resposta na parte inferior.
Javadba 27/11
3

Esta é uma sintaxe curta para versões mais recentes:

mvn install:install-file -Dfile=<path-to-file>

Funciona quando o JAR foi construído pelo Apache Maven - o caso mais comum. Em seguida, ele conterá um pom.xml em uma subpasta do diretório META-INF, que será lido por padrão.

Fonte: http://maven.apache.org/guides/mini/guide-3rd-party-jars-local.html

joro
fonte
2

Veja também ...

<scope>compile</scope>

Dependências do Maven . Esse é o padrão, mas, em alguns casos, encontrei explicitamente definindo esse escopo também como Maven para encontrar bibliotecas locais no repositório local.

Kervin
fonte
2

Por alguma razão, no aplicativo da Web para o qual estou dando manutenção, nem a solução de Alireza Fattahi nem a solução de JJ Roman funcionaram corretamente. Nos dois casos, a compilação corre bem (vê o frasco), mas a embalagem falha ao incluir o frasco dentro da guerra.

A única maneira de conseguir fazê-lo funcionar foi colocar o frasco /src/main/webapp/WEB-INF/lib/e combiná-lo com a solução de Fattahis ou Roman.

Haroldo_OK
fonte
1

Observe que NÃO é necessariamente uma boa ideia usar um repositório local. Se este projeto for compartilhado com outras pessoas, todos os outros terão problemas e perguntas quando não funcionar, e o jar não estará disponível nem no seu sistema de controle de origem!

Embora o repositório compartilhado seja a melhor resposta, se você não puder fazer isso por algum motivo, a incorporação do jar é melhor do que um repositório local. O conteúdo de repositório somente local pode causar muitos problemas, especialmente com o tempo.

Frank
fonte
1
se você adicionar os jars no sistema de controle de origem, as bibliotecas sempre estarão disponíveis junto com a fonte. Sem fonte, sem bibliotecas. Com o maven, a fonte pode estar ok, mas o repositório indisponível.
Sarah.ferguson
@ Frank ... alguma idéia sobre como criar jar executável sem incluir dependências externas (arquivos de biblioteca)?
Satish Karuturi
Para alguém iniciante no assunto, e procurando uma resposta para a pergunta original, o que significa "incorporar a jarra"?
Cdock
1

No seu repositório local, você pode instalar seu jar emitindo os comandos

 mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> \
-DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging>

Siga este link útil para fazer o mesmo no site de mkyoung. Você também pode verificar o guia do maven para o mesmo

bpjoshi
fonte
1

Para instalar jar de terceiros, chame o comando como abaixo

mvn install:install-file -DgroupId= -DartifactId= -Dversion= -Dpackaging=jar -Dfile=path
Ravikiran Reddy Kotapati
fonte
1
  1. instalação mvn

Você pode escrever o código abaixo na linha de comando ou, se estiver usando o eclipse embutido, clique com o botão direito do mouse em projeto -> Executar como -> execute configurações ... -> no painel esquerdo, clique com o botão direito em Maven Build -> nova configuração -> escreva o código em Objetivos e no diretório base: $ {project_loc: NameOfYourProject} -> Executar

mvn install:install-file
   -Dfile=<path-to-file>
   -DgroupId=<group-id>
   -DartifactId=<artifact-id>
   -Dversion=<version>
   -Dpackaging=<packaging>
   -DgeneratePom=true

Onde cada um se refere a:

<caminho para o arquivo>: o caminho para o arquivo a ser carregado, por exemplo - -> c: \ kaptcha-2.3.jar

<id do grupo>: o grupo em que o arquivo deve ser registrado em, por exemplo - -> com.google.code

<id do artefato>: o nome do artefato para o arquivo, por exemplo - -> kaptcha

<version>: a versão do arquivo, por exemplo -> 2.3

<embalagem>: a embalagem do arquivo, por exemplo - -> jar

Depois de instalado, apenas declara jar em pom.xml.

 <dependency>
      <groupId>com.google.code</groupId>
      <artifactId>kaptcha</artifactId>
      <version>2.3</version>
 </dependency>
Mazen Embaby
fonte
1

Etapa 1: configure maven-install-plugino objetivo com o install-fileseupom.xml

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-install-plugin</artifactId>
    <executions>
        <execution>
            <id>install-external-non-maven-jar-MWS-Client-into-local-maven-repo</id>
            <phase>clean</phase>
            <configuration>
                <repositoryLayout>default</repositoryLayout>
                <groupId>com.amazonservices.mws</groupId>
                <artifactId>mws-client</artifactId>
                <version>1.0</version>
                <file>${project.basedir}/lib/MWSClientJavaRuntime-1.0.jar</file>
                <packaging>jar</packaging>
                <generatePom>true</generatePom>
            </configuration>
            <goals>
                <goal>install-file</goal>
            </goals>
        </execution>
    </executions>
</plugin>

Certifique-se de editar o filecaminho com base no caminho real do arquivo (recomendado é colocar esses frascos externos que não sejam de maven dentro de alguma pasta, digamos lib, e coloque essa libpasta dentro do seu projeto para usar o caminho relativo específico do projeto e evitar adicionar sistemas caminho absoluto específico.

Se você tiver vários frascos externos, repita o mesmo <execution>para outros frascos dentro do mesmo maven-install-plugin.

Etapa 2: Depois de configurar o maven-install-plugincomo mostrado acima no seu pom.xmlarquivo, você deverá usar esses jars no seu, pom.xmlcomo de costume:

    <dependency>
        <groupId>com.amazonservices.mws</groupId>
        <artifactId>mws-client</artifactId>
        <version>1.0</version>
    </dependency>

Observe que maven-install-pluginapenas copia seus jars externos para o .m2repositório maven local . É isso aí. Ele não inclui automaticamente esses frascos como dependências importantes para o seu projeto.

É um ponto menor, mas às vezes fácil de perder.

Yatendra Goel
fonte
0

Eu tive o mesmo erro para um conjunto de dependências no meu pom.xml. As versões das dependências não foram especificadas no pom.xml e foram mencionadas no repositório pai. Por alguma razão, os detalhes da versão não estavam sendo sincronizados com este repositório. Daí eu inseri manualmente as versões usando a tag e funcionou como um encanto. Pouco tempo necessário para procurar as versões no pai e especificar aqui. Mas isso pode ser feito apenas para os frascos que estão mostrando o erro do artefato e ele funciona. Espero que isso ajude alguém.

Ranjan Rozario
fonte
0

No Apache Maven 3.5.4, tive que adicionar aspas duplas. Sem aspas duplas, não funcionou para mim.

exemplo: mvn install: install-file "-Dfile = local no arquivo jar" "-DgroupId = id do grupo" "-DartifactId = id do artefato" "-Dversion = version" "-Dpackaging = package type"

Kavindu Gayan
fonte
0
  1. Crie um diretório de repositório local do Maven. A raiz do seu projeto deve ser algo assim para começar:
yourproject
+- pom.xml
+- src
  1. Adicione um diretório de repositório Maven padrão chamado repo para o grupo com.example e versão 1.0:
yourproject
+- pom.xml
+- src
+- repo
  1. Implantar o artefato No repositório, o Maven pode implantar o artefato para você usando o objetivo mvn deploy: deploy-file:
mvn deploy:deploy-file -Durl=file:///pathtoyour/repo -Dfile=your.jar -DgroupId=your.group.id -DartifactId=yourid -Dpackaging=jar -Dversion=1.0
  1. instale o arquivo pom correspondente ao seu jar para que seu projeto possa encontrar jar durante a compilação do maven a partir do repositório local:
mvn install:install-file -Dfile=/path-to-your-jar-1.0.jar -DpomFile=/path-to-your-pom-1.0.pom
  1. adicione repositório em seu arquivo pom:
<repositories>
    <!--other repositories if any-->
    <repository>
        <id>project.local</id>
        <name>project</name>
        <url>file:${project.basedir}/repo</url>
    </repository>
</repositories>
  1. adicione a dependência no seu pom:
<dependency>
    <groupId>com.groupid</groupId>
    <artifactId>myid</artifactId>
    <version>1.0</version>
</dependency>
Dean Jain
fonte
-2

ESTA RESPOSTA É APENAS PARA USUÁRIOS DA ECLIPSE:

Se você estiver usando o Eclipse, coloque o jar no lib /, clique com o botão direito do mouse no nome do jar e clique em "add to build path". O Eclipse criará uma "biblioteca referenciada" e colocará o jar para você

Resolveu a importação do jar imediatamente no programa para mim

Anandkumar
fonte
5
Que irá adicionar entrada em Eclipse .classpath, mas a sua construção Maven mvn packageserá brocket uma vez que você começar a usar essa dependência, como maven não tem uma definição dele, e ele deve ser apenas empom.xml
Paul Verest
Sim, você está certo, o pacote não inclui o frasco local. Mas eu respondi à pergunta, como adicioná-lo a um projeto (de maneira eclipse).
Anandkumar