Obtenir les fichiers jar source attachés à Eclipse pour les dépendances gérées par Maven

178

J'utilise Maven (et l'intégration Maven Eclipse) pour gérer les dépendances de mes projets Java dans Eclipse. La fonction de téléchargement automatique des fichiers JAR à partir des référentiels Maven est un gain de temps réel. Malheureusement, il n'inclut pas la documentation API et le code source.

Comment puis-je configurer Maven pour obtenir automatiquement les pièces jointes source et javadoc et les enregistrer correctement avec Eclipse?

Thilo
la source
Question connexe demandant comment toujours télécharger les sources et javadoc lors de l'utilisation de maven: stackoverflow.com/questions/5780758/…
Flux

Réponses:

226

Je suis sûr que le plugin m2eclipse Maven pour Eclipse - l'inverse - peut le faire. Vous pouvez le configurer pour télécharger automatiquement les fichiers source et javadoc.

Ceci est réalisé en allant dans Fenêtre> Préférences> Maven et en cochant les options «Télécharger les sources d'artefact» et «Télécharger l'artefact JavaDoc».

Capture d'écran des préférences Maven

mrembisz
la source
Oui, je viens de commencer à utiliser m2eclipse, et cela prend en compte cela (et bien d'autres choses maven).
Thilo
45
Aucune de ces réponses n'est une réponse. Pourquoi sont-ils votés? J'ai pu télécharger les sources en contrôlant-cliquant sur le projet dans la vue Navigateur et en choisissant "m2 Maven" -> "Télécharger les sources". J'ai ensuite pu cliquer sur la commande (mac) sur la classe pour accéder à la source liée.
Alex Worden
8
Il semble que si le JAR compilé a déjà été téléchargé, Eclipse n'essaiera pas d'obtenir les JAR source / Javadoc immédiatement. Il semble que la modification d'un POM contenant une dépendance sur les POM pour lesquels je veux le source / Javadoc dans Eclipse et l'enregistrement du POM télécharge le source / Javadoc pour les dépendances, même si le JAR compilé est déjà dans le cache du référentiel Maven.
Francis Gagné
13
@Francis - Après avoir effectué la modification ci-dessus, faites un clic droit sur votre projet et sélectionnez "Maven> Mettre à jour le projet ..." Cela entraînera le téléchargement de vos fichiers jar source.
carbontax
3
Au lieu de télécharger les sources pour toutes les dépendances, est-il possible de télécharger uniquement pour certaines dépendances en les spécifiant dans pom avec la dépendance elle-même, peut-être via une balise interne dans une balise de dépendance ou quelque chose de similaire?
nanosoft
129
mvn eclipse:eclipse -DdownloadSources=true

ou

mvn eclipse:eclipse -DdownloadJavadocs=true

ou vous pouvez ajouter les deux indicateurs, comme le souligne Spencer K.

De plus, la =trueportion n'est pas requise, vous pouvez donc utiliser

mvn eclipse:eclipse -DdownloadSources -DdownloadJavadocs
Stephen Denne
la source
8
ou les deux! mvn eclipse: eclipse -DdownloadSources = true -DdownloadJavadocs = true Cela ne fonctionne que si la source et les javadocs ont été fournis au dépôt à partir duquel vous téléchargez. Parfois, ils ne sont pas fournis comme Spring.
Spencer Kormos
2
Le printemps les fournit maintenant.
Robin Green
Notez que cette réponse a plus de 10 ans. Utilisez le plugin m2e dans eclipse au lieu de laisser maven créer des fichiers de configuration eclipse.
Thorbjørn Ravn Andersen
71

Les autres réponses sur ce travail, mais si vous voulez éviter d'avoir à vous souvenir des arguments de ligne de commande, vous pouvez également simplement ajouter à la configuration downloadSources et downloadJavadocs dans la section maven-eclipse-plugin de votre 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>
réfléchir
la source
serais-je capable de définir cela à un niveau de dépendance?
marcorossi
@marcorossi Désolé, je ne suis pas sûr que cela soit possible.
repenser
Je ne suis pas convaincu que ce soit approprié. Les paramètres de téléchargement source et Javadoc sont certainement une préférence de l'utilisateur, pas une préoccupation au niveau du projet? Voir ma réponse ci-dessous pour savoir comment placer cela dans le settings.xmlfichier.
Duncan Jones le
J'ai reçu cet avertissement: [AVERTISSEMENT] 'build.plugins.plugin.version' pour org.apache.maven.plugins: maven-eclipse-plugin est manquant. Pour résoudre ce problème, vous pouvez ajouter quelque chose comme ceci ci-dessous <artifactId>: <version> 2.9 </version>
Christiaan
16

Je préfère ne pas mettre les paramètres de téléchargement source / Javadoc dans le pom.xmlfichier de projet car je pense que ce sont des préférences de l'utilisateur, pas des propriétés du projet. Au lieu de cela, je les place dans un profil dans mon settings.xmldossier:

<?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
la source
1
J'ai copié ce settings.xml dans .m2 mais les sources et les javadocs ne sont pas copiés. La commande suivante explicitement sur l'interface de ligne de commande apporte cependant les sources et les javadocs: dépendance mvn: dépendance des sources: résoudre -Dclassifier = javadoc Des pensées?
Arun Gupta
Peut-être que cela fonctionne, mais veuillez expliquer, comment le plugin maven eclipse est-il censé trouver ces paramètres de configuration? Vous pensez qu'il recherche des propriétés globales?
chrisinmtown
9

Faites un clic droit sur le projet -> maven -> télécharger les sources

sumeet
la source
3
Tout le monde a dit comment l'activer et non comment demander à maven de télécharger les sources! après avoir activé l'option
Tchad
8

Si les fichiers JAR sources sont dans le référentiel local et que vous utilisez Eclipses maven support, les sources sont automatiquement attachées. Vous pouvez exécuter mvn dependency:sourcespour télécharger tous les fichiers jars source pour un projet donné. Je ne sais pas comment faire de même avec la documentation.

Robuste
la source
Cela a fonctionné pour moi. Après avoir exécuté mvn dependency:sources, j'ai pu cliquer dans Eclipse pour lire la source. Aucun déblayage supplémentaire avec m2e requis. Pour télécharger les javadocs que vous faites mvn dependency:sources -Dclassifier=javadoc.
Mat Gessel
4

Si vous utilisez meclipse, faites

fenêtre -> maven -> Télécharger les sources d'artefacts (sélectionnez coche)

(Si vous obtenez toujours la fenêtre Attacher la source, cliquez sur le bouton Joindre un fichier et fermez la fenêtre Attacher la source. La prochaine fois que vous essayez de voir la source, elle ouvrira la source correcte)

Surajz

surajz
la source
3

Il y a aussi une question similaire qui répond à cela et inclut des exemples de paramètres de pom.

andrel
la source
3

J'ai essayé windows-> pref ..-> Maven Mais ça ne fonctionnait pas. Par conséquent, j'ai créé un nouveau chemin de classe avec la commande mvn eclipse: eclipse -DdownloadSources = true et actualisé l'espace de travail une fois. voila .. Les sources étaient jointes.

L'entrée du fichier source est disponible dans le chemin de classe. Par conséquent, une nouvelle version a résolu le problème ...

om39a
la source
Avec votre solution, je peux choisir et choisir le module pour lequel je souhaite obtenir des sources. Entrez simplement dans ce module et construisez avec "mvn eclipse: clean eclipse: eclipse -DdownloadSources = true -T4 -Dmaven.test.skip = true -Denforcer.skip = true". Merci :)
vishwarajanand
2

dans ma version d'Eclipse helios avec m2Eclipse il n'y a pas

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

Sous la fenêtre se trouve uniquement "nouvelle fenêtre", "nouvel éditeur", "perspective ouverte", etc.

Si vous faites un clic droit sur votre projet, choisissez maven -> télécharger les sources

Il ne se passe rien. aucune source n'est téléchargée, aucun fichier pom n'est mis à jour, aucune fenêtre ne s'affiche pour vous demander quelles sources.

Faire mvn xxx en dehors de eclipse est dangereux - certaines commandes ne fonctionnent pas avec m2ecilpse - je l'ai fait une fois et j'ai perdu tout le projet, j'ai dû réinstaller eclipse et repartir de zéro.

Je suis toujours à la recherche d'un moyen d'obtenir ecilpse et maven pour trouver et utiliser la source de fichiers JAR externes comme servlet-api.

écrou papillon
la source
2

Changer pom pour maven-eclipse-plugin pour inclure source / javadoc s'applique simplement aux nouvelles dépendances ajoutées à pom. Si nous devons faire une demande pour des dépendances existantes, nous devons exécuter mvn dependency: sources. J'ai vérifié cela.

bnguyen82
la source
2

La vérification de la source de téléchargement / javadoc dans la préférence Eclipse-Maven n'est parfois pas suffisante. Si maven ne parvient pas à les télécharger pour une raison quelconque (une panne de réseau?), Maven crée des fichiers * .lastUpdated, puis ne sera plus jamais téléchargé. Ma solution empirique était de supprimer le répertoire des artefacts de .m2 / repository, et de redémarrer l'espace de travail eclipse avec la source de téléchargement / javadoc cochée et les projets de mise à jour au démarrage cochés également. Une fois l'espace de travail redémarré, certains projets peuvent être marqués comme étant une erreur, tandis que la progression de l'éclipse est en cours de téléchargement, toute erreur sera effacée. Peut-être que cette procédure n'est pas si "scientifique", mais pour moi elle a réussi.

utilisateur17417
la source
1

J'ai ajouté la configuration pom au plugin maven-eclipse pour télécharger la source et les javadocs, mais j'espère que cela se produira pour les nouvelles dépendances, pas celles existantes.

Pour les dépendances existantes, j'ai parcouru l'explorateur de packages jusqu'aux "Dépendances Maven" et j'ai cliqué avec le bouton droit sur commons-lang-2.5.jar, sélectionné Maven | Télécharger les sources et ... rien ne semble se produire (pas de barre de progression ou d'indication qu'il faisait quoi que ce soit). Il a cependant été téléchargé car je suis maintenant capable de passer à la source dans commons-lang.

unique72
la source
1

overhink suggéré d'utiliser la configuration dans le 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>
...

Tout d'abord, je pensais que cela n'attacherait toujours pas le javadoc et les sources (comme j'ai essayé sans succès avec cette option -DdownloadSources auparavant).

Mais surprise, le fichier .classpath obtient ses sources et javadoc attachés lorsque vous utilisez la variante POM!

Jhohlfeld
la source
1

Pour Indigo (et probablement Helios), les cases à cocher mentionnées ci-dessus se trouvent ici:

Fenêtre -> Préférences -> Maven

Chris Romine
la source
0

J'avais un problème similaire, et la solution qui fonctionnait le mieux pour moi était d'inclure la source dans le même fichier jar que le code compilé (ainsi un répertoire donné dans le fichier jar inclurait à la fois Foo.javaet Foo.class). Eclipse associe automatiquement la source au code compilé et fournit automatiquement le JavaDoc à partir de la source. De toute évidence, cela n'est utile que si vous contrôlez l'artefact.

Dan R.
la source
0

Après avoir défini les propriétés au niveau du projet ou au niveau des propriétés utilisateur, veuillez effectuer un Maven -> Mettre à jour le projet (Forcer la mise à jour). Il télécharge les sources

Arkabhi
la source