Obter arquivos jar de origem anexados às dependências gerenciadas pelo Eclipse for Maven

176

Estou usando o Maven (e a Integração do Maven Eclipse) para gerenciar as dependências dos meus projetos Java no Eclipse. O recurso de download automático de arquivos JAR dos repositórios Maven economiza em tempo real. Infelizmente, ele não inclui a documentação da API e o código-fonte.

Como configurar o Maven para obter automaticamente também os anexos de origem e javadoc e registrá-los corretamente no Eclipse?

Thilo
fonte
Pergunta relacionada perguntando como sempre fazer download de fontes e javadoc ao usar o maven: stackoverflow.com/questions/5780758/…
Flow

Respostas:

226

Estou certo de que o plugin m2eclipse Maven para Eclipse - ao contrário - pode fazer isso. Você pode configurá-lo para baixar os arquivos de origem e o javadoc automaticamente para você.

Isso é alcançado em Janela> Preferências> Maven e verificando as opções "Fazer download de fontes de artefato" e "Fazer download de artefato JavaDoc".

Captura de tela das preferências do Maven

mrembisz
fonte
Sim, eu comecei a usar o m2eclipse, e isso leva o carro disso (e muitas outras coisas).
Thilo
44
Nenhuma dessas respostas é resposta. Por que eles estão sendo votados? Consegui fazer o download das fontes clicando com o botão direito do mouse no projeto na visualização Navigator e escolhendo "m2 Maven" -> "Download Sources". Pude clicar em comando (mac) na classe para navegar até a fonte vinculada.
precisa
8
Parece que se o JAR compilado já tiver sido baixado, o Eclipse não tentará obter os JARs de origem / Javadoc imediatamente. Parece que modificar um POM contendo uma dependência nos POMs para os quais desejo a origem / Javadoc no Eclipse e salvar o POM faz o download da origem / Javadoc para as dependências, mesmo se o JAR compilado já estiver no cache do repositório Maven.
Francis Gagné
13
@Francis - Depois de fazer as alterações acima, clique com o botão direito do mouse em seu projeto e selecione "Maven> Atualizar projeto ..." Isso fará com que os seus jars de origem sejam baixados.
carbontax
3
Em vez de baixar fontes para todas as dependências, é possível fazer o download apenas para algumas dependências, especificando-o em pom junto com a própria dependência, pode b através de alguma tag interna na tag de dependência ou algo semelhante?
Nanosoft
127
mvn eclipse:eclipse -DdownloadSources=true

ou

mvn eclipse:eclipse -DdownloadJavadocs=true

ou você pode adicionar os dois sinalizadores, como Spencer K aponta.

Além disso, a =trueparte não é necessária, para que você possa usar

mvn eclipse:eclipse -DdownloadSources -DdownloadJavadocs
Stephen Denne
fonte
8
ou ambos! mvn eclipse: eclipse -DdownloadSources = true -DdownloadJavadocs = true Isso funciona apenas se a fonte e os javadocs foram fornecidos ao repositório do qual você está baixando. Às vezes, eles não são fornecidos como o Spring.
Spencer Kormos
2
A primavera agora os fornece.
Robin Green
Observe que esta resposta tem mais de 10 anos. Use o plug-in m2e no eclipse, em vez de ter que criar arquivos de configuração do eclipse.
Thorbjørn Ravn Andersen
71

As outras respostas neste trabalho, mas se você quiser evitar ter que se lembrar dos argumentos da linha de comando, também poderá adicionar a configuração downloadSources e downloadJavadocs à seção maven-eclipse-plugin do seu pom.xml:

<project>
    ...
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-eclipse-plugin</artifactId>
                <configuration>
                    <downloadSources>true</downloadSources>
                    <downloadJavadocs>true</downloadJavadocs>
                    ... other stuff ...
                </configuration>
            </plugin>
        </plugins>
    </build>
    ...
</project>
pensar demais
fonte
eu seria capaz de definir isso em um nível por dependência?
Marcorossi 11/11
@marcorossi Desculpe, não tenho certeza se isso é possível.
overthink
Não estou convencido de que isso seja apropriado. Certamente as configurações de download de fonte e Javadoc são uma preferência do usuário, não uma preocupação no nível do projeto? Veja minha resposta abaixo para saber como colocar isso no settings.xmlarquivo.
Duncan Jones
Recebi este aviso: [AVISO] 'build.plugins.plugin.version' para org.apache.maven.plugins: o maven-eclipse-plugin está ausente. Para corrigir isso, você pode adicionar algo como isto abaixo <artifactId>: <version> 2.9 </version> #
Christiaan
16

Prefiro não colocar as configurações de download de origem / Javadoc no pom.xmlarquivo do projeto, pois sinto que essas são preferências do usuário, não propriedades do projeto. Em vez disso, eu os coloco em um perfil no meu settings.xmlarquivo:

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">

  <profiles>
    <profile>
      <id>sources-and-javadocs</id>
      <properties>
        <downloadSources>true</downloadSources>
        <downloadJavadocs>true</downloadJavadocs>
      </properties>
    </profile>
  </profiles>

  <activeProfiles>
    <activeProfile>sources-and-javadocs</activeProfile>
  </activeProfiles>
</settings>
Duncan Jones
fonte
1
Copiei esse settings.xml em .m2, no entanto, fontes e javadocs não estão sendo copiados. O comando a seguir explicitamente na CLI traz as fontes e os javadocs: dependência mvn: dependência das fontes: resolve -Dclassifier = javadoc Quaisquer pensamentos?
Arun Gupta
Talvez isso funcione, mas por favor explique, como o plugin maven eclipse deve encontrar essas definições de configuração? Você acha que procura propriedades globais?
Chrisinmtown
9

Clique com o botão direito do mouse em projeto -> maven -> fontes de download

sumeet
fonte
3
Todo mundo disse como habilitá-lo e não como fazer o download das fontes! depois de ativar a opção
Chad
8

Se os jars de origem estiverem no repositório local e você estiver usando o Eclipses, eles serão automaticamente anexados. Você pode executar o mvn dependency:sourcesdownload de todos os frascos de origem para um determinado projeto. Não tenho certeza de como fazer o mesmo com a documentação.

Hardy
fonte
Isso funcionou para mim. Após a execução mvn dependency:sources, consegui clicar no Eclipse para ler a fonte. Não é necessário sujeira adicional com m2e. Para baixar os javadocs que você faz mvn dependency:sources -Dclassifier=javadoc.
Mat Gessel 5/05
4

Se você estiver usando meclipse, faça

janela -> maven -> Fazer Download das Fontes de Artefato (marque a seleção)

(Se você ainda receber a janela de fonte de anexação, clique no botão anexar arquivo e feche a janela de fonte de anexação. Na próxima vez em que tentar ver a fonte, ela abrirá a fonte correta)

Surajz

surajz
fonte
3

Há também uma pergunta semelhante que responde a isso e inclui exemplos de configurações de pom.

andrel
fonte
3

Eu tentei windows-> pref ..-> Maven Mas não estava funcionando. Portanto, criei um novo caminho de classe com o comando mvn eclipse: eclipse -DdownloadSources = true e atualizei o espaço de trabalho uma vez. voila .. Fontes foram anexadas.

A entrada do jar de origem está disponível no caminho da classe. Portanto, o novo build resolveu o problema ...

om39a
fonte
Com sua solução, posso escolher para qual módulo quero obter fontes. Simplesmente entre nesse módulo e construa com "mvn eclipse: clean eclipse: eclipse -DdownloadSources = true -T4 -Dmaven.test.skip = true -Denforcer.skip = true". Obrigado :)
vishwarajanand
2

na minha versão do Helios Eclipse com m2Eclipse não há

window --> maven --> Download Artifact Sources (select check)

Sob a janela é apenas "nova janela", "novo editor" "perspectiva aberta" etc.

Se você clicar com o botão direito do mouse no seu projeto, escolha maven -> download sources

Nada acontece. nenhuma fonte é baixada, nenhum arquivo pom é atualizado, nenhuma janela é exibida perguntando quais fontes.

Fazer mvn xxx fora do eclipse é perigoso - alguns comandos não funcionam com m2ecilpse - fiz isso uma vez e perdi o projeto inteiro, tive que reinstalar o eclipse e começar do zero.

Ainda estou procurando uma maneira de obter ecilpse e maven para encontrar e usar a fonte de frascos externos como servlet-api.

wingnut
fonte
2

Mudar o pom do maven-eclipse-plugin para incluir source / javadoc apenas solicita que novas dependências sejam adicionadas ao pom. Se precisarmos solicitar dependências existentes, devemos executar mvn dependency: sources. Eu verifiquei isso.

bnguyen82
fonte
2

Verificar a fonte de download / javadoc na preferência Eclipse-Maven, às vezes não é suficiente. No caso de o maven falhar ao fazer o download por algum motivo (um blecaute na rede?), O maven cria alguns arquivos * .lastUpdated e nunca mais será baixado novamente. Minha solução empírica foi excluir o diretório de artefatos de .m2 / repository e reiniciar o espaço de trabalho do eclipse com a fonte de download / javadoc marcada e atualizar os projetos na inicialização também. Após o espaço de trabalho ter sido reiniciado, talvez alguns projetos possam ser marcados com erro, enquanto o progresso do eclipse estiver sendo baixado, qualquer erro será limpo. Talvez este procedimento não seja tão "científico", mas para mim foi bem-sucedido.

user17417
fonte
1

Eu adicionei a configuração pom ao plugin maven-eclipse para baixar o código-fonte e os javadocs, mas acho que espero que isso aconteça para novas dependências, e não para as existentes.

Para dependências existentes, naveguei no explorador de pacotes até "Dependências do Maven" e cliquei com o botão direito do mouse em commons-lang-2.5.jar, selecionado Maven | Baixe Fontes e ... nada pareceu acontecer (nenhuma barra de progresso ou indicação de que estava fazendo alguma coisa). No entanto, ele foi baixado, pois agora eu posso ir para a fonte em commons-lang.

unique72
fonte
1

pense demais usando a configuração no pom:

<project>
...
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-eclipse-plugin</artifactId>
            <configuration>
                <downloadSources>true</downloadSources>
                <downloadJavadocs>true</downloadJavadocs>
                ... other stuff ...
            </configuration>
        </plugin>
    </plgins>
</build>
...

Primeiro, pensei que isso ainda não anexaria o javadoc e o sources (como tentei sem êxito com a opção -DdownloadSources antes).

Mas surpresa: o arquivo .classpath está recebendo suas fontes e javadoc anexados ao usar a variante POM!

jhohlfeld
fonte
1

Para Indigo (e provavelmente Helios), as caixas de seleção mencionadas acima estão localizadas aqui:

Janela -> Preferências -> Maven

Chris Romine
fonte
0

Eu tive um problema semelhante, e a solução que funcionou melhor para mim foi incluir a fonte no mesmo jar que o código compilado (para que um determinado diretório no jar incluísse ambos Foo.javae Foo.class). O Eclipse associa automaticamente a fonte ao código compilado e fornece automaticamente o JavaDoc a partir da fonte. Obviamente, isso só é útil se você controlar o artefato.

Dan R.
fonte
0

Após definir as propriedades no nível do projeto ou nas propriedades do usuário, faça um Maven -> Atualizar projeto (Forçar atualização). Ele baixa as fontes

arkabhi
fonte