Получите исходные файлы jar, прикрепленные к Eclipse для зависимостей, управляемых Maven

176

Я использую Maven (и Maven Eclipse Integration) для управления зависимостями для моих Java-проектов в Eclipse. Функция автоматической загрузки файлов JAR из репозиториев Maven позволяет сэкономить время. К сожалению, он не включает документацию по API и исходный код.

Как настроить Maven на автоматическое получение исходных файлов и вложений javadoc и их правильную регистрацию в Eclipse?

Тило
источник
Связанный вопрос, спрашивающий, как всегда загружать исходники и javadoc при использовании maven: stackoverflow.com/questions/5780758/…
Flow

Ответы:

226

Я уверен, что плагин m2eclipse Maven для Eclipse - наоборот - может сделать это. Вы можете настроить его для автоматической загрузки как исходных файлов, так и javadoc.

Это достигается путем перехода в Window> Preferences> Maven и проверки параметров «Download Artifact Sources» и «Download Artifact JavaDoc».

Снимок экрана настроек Maven

mrembisz
источник
Да, я только начал использовать m2eclipse, и он берет машину этого (и многих других maven).
Тило
44
Ни один из этих ответов не является ответом. Почему за них голосуют? Я смог загрузить исходные коды, щелкнув по проекту «Control» в представлении «Навигатор» и выбрав «m2 Maven» -> «Загрузить источники». Затем я смог щелкнуть по команде (mac) в классе, чтобы перейти к связанному источнику.
Алекс Уорден
8
Похоже, что если скомпилированный JAR уже был загружен, Eclipse не будет пытаться сразу получить JAR-файлы source / Javadoc. Похоже, что изменение POM, содержащего зависимость от POM, для которого я хочу источник / Javadoc в Eclipse, и сохранение POM загружает источник / Javadoc для зависимостей, даже если скомпилированный JAR уже находится в кэше репозитория Maven.
Фрэнсис Гань
13
@Francis - После внесения вышеуказанных изменений щелкните правой кнопкой мыши свой проект и выберите «Maven> Обновить проект ...». Это приведет к загрузке ваших jar-файлов с исходным кодом.
carbontax
3
Вместо того, чтобы загружать источники для всех зависимостей, возможно ли загрузить только некоторые зависимости, указав их в pom вместе с самой зависимостью, может b через некоторый внутренний тег в теге зависимостей или что-то подобное?
Нанософт
127
mvn eclipse:eclipse -DdownloadSources=true

или

mvn eclipse:eclipse -DdownloadJavadocs=true

или вы можете добавить оба флага, как указывает Спенсер К.

Кроме того, =trueпорция не требуется, поэтому вы можете использовать

mvn eclipse:eclipse -DdownloadSources -DdownloadJavadocs
Стивен Денн
источник
8
или оба! mvn eclipse: eclipse -DdownloadSources = true -DdownloadJavadocs = true Это работает, только если исходный код и javadocs были предоставлены для репозитория, из которого вы загружаете. Иногда они не предоставляются, как весна.
Спенсер Кормос
2
Весна теперь обеспечивает их.
Робин Грин
Обратите внимание, что этому ответу более 10 лет. Используйте плагин m2e в eclipse вместо того, чтобы maven создавал файлы конфигурации eclipse.
Турбьёрн Равн Андерсен
71

Другие ответы на эту работу, но если вы хотите избежать запоминания аргументов командной строки, вы также можете просто добавить конфигурацию downloadSources и downloadJavadocs в раздел maven-eclipse-plugin вашего 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>
overthink
источник
Могу ли я установить это на уровне зависимости?
Маркоросси
@marcorossi Извините, я не уверен, возможно ли это.
думаю,
Я не уверен, что это уместно. Конечно, исходные тексты и параметры загрузки Javadoc являются предпочтением пользователя, а не проблемой на уровне проекта? Смотрите мой ответ ниже о том, как поместить это в settings.xmlфайл.
Дункан Джонс
Я получил это предупреждение: [ПРЕДУПРЕЖДЕНИЕ] 'build.plugins.plugin.version' для org.apache.maven.plugins: maven-eclipse-plugin отсутствует. Чтобы исправить это, вы можете добавить что-то вроде этого ниже <artifactId>: <версия> 2.9 </ версия>
Christiaan
16

Я предпочитаю не помещать исходные / Javadoc параметры загрузки в pom.xmlфайл проекта, так как считаю, что это пользовательские настройки, а не свойства проекта. Вместо этого я помещаю их в профиль в моем settings.xmlфайле:

<?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>
Дункан Джонс
источник
1
Я скопировал этот файл settings.xml в .m2, однако источники и javadocs не копируются. Следующая команда явно для CLI переносит источники и javadocs, хотя: mvn зависимость: источники зависимость: resolv -Dclassifier = javadoc Есть какие-нибудь мысли?
Арун Гупта
Может быть, это работает, но, пожалуйста, объясните, как плагин maven eclipse должен найти эти параметры конфигурации? Вы думаете, что он ищет глобальные свойства?
chrisinmtown
9

Щелкните правой кнопкой мыши на проекте -> Maven -> источники загрузки

Sumeet
источник
3
Все говорили, как включить его, а не как заставить maven скачивать исходники! после включения опции
Чад
8

Если файлы jar находятся в локальном репозитории, и вы используете поддержку Eclipses maven, источники автоматически присоединяются. Вы можете запустить, mvn dependency:sourcesчтобы загрузить все исходные файлы для данного проекта. Не уверен, как сделать то же самое с документацией, хотя.

выносливый
источник
Это сработало для меня. После запуска mvn dependency:sourcesя смог щелкнуть в Eclipse, чтобы прочитать исходный код. Никаких дополнительных операций с m2e не требуется. Чтобы скачать Javadocs вы делаете mvn dependency:sources -Dclassifier=javadoc.
Мат Гессель
4

Если вы используете meclipse, сделайте

window -> maven -> Download Artifact Sources (выберите отметку)

(Если вы по-прежнему получаете окно вложения источника, нажмите кнопку вложения файла и закройте окно вложения источника. При следующей попытке увидеть источник откроется правильный источник)

Surajz

surajz
источник
3

Я попробовал windows-> pref ..-> Maven, но это не сработало. Поэтому я создал новый путь к классу с помощью команды mvn eclipse: eclipse -DdownloadSources = true и обновил рабочее пространство один раз. вуаля .. Источники были прикреплены.

Запись исходного jar доступна в пути к классам. Следовательно, новая сборка решила проблему ...

om39a
источник
С вашим решением я могу выбрать, для какого модуля я хочу получить источники. Просто перейдите в этот модуль и выполните команду "mvn eclipse: clean eclipse: eclipse -DdownloadSources = true -T4 -Dmaven.test.skip = true -Denforcer.skip = true". Спасибо :)
Вишвараджан и
2

в моей версии Eclipse helios с m2Eclipse нет

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

Под окном только «новое окно», «новый редактор», «открытая перспектива» и т. Д.

Если вы щелкнете правой кнопкой мыши по своему проекту, то выберите maven -> источники загрузки

Ничего не произошло. не загружаются источники, не обновляются файлы pom, не появляется всплывающее окно с вопросом, какие источники.

Выполнение mvn xxx вне eclipse опасно - некоторые команды не работают с m2ecilpse - я сделал это один раз и потерял весь проект, пришлось переустановить Eclipse и начать с нуля.

Я все еще ищу способ заставить ecilpse и maven найти и использовать источник внешних jar-файлов, таких как servlet-api.

Wingnut
источник
2

Изменение pom для maven-eclipse-plugin для включения source / javadoc просто применяет новые зависимости, добавляемые в pom. Если нам нужно подать заявку на существующие зависимости, мы должны запустить mvn dependency: sources. Я проверил это.

bnguyen82
источник
2

Проверка исходного кода загрузки / javadoc в предпочтениях Eclipse-Maven иногда недостаточна. Если maven по какой-то причине не смог загрузить их (отключение сети?), Maven создаст некоторые файлы * .lastUpdated и больше никогда не загрузит их. Мое эмпирическое решение состояло в том, чтобы удалить каталог артефактов из .m2 / repository и перезапустить рабочее пространство eclipse с проверкой download source / javadoc и проверять также обновление проектов при запуске. После перезапуска рабочей области, возможно, некоторые проекты могут быть помечены как ошибочные, в то время как процесс затмения загружается, тогда любая ошибка будет очищена. Может быть, эта процедура не такая «научная», но для меня все-таки получилось.

user17417
источник
1

Я добавил конфигурацию pom в плагин maven-eclipse для загрузки исходного кода и javadocs, но я думаю / надеюсь, что это произойдет для новых зависимостей, а не для существующих.

Для существующих зависимостей, я просмотрел в проводнике пакетов до «Зависимости Maven» и щелкнул правой кнопкой мыши на commons-lang-2.5.jar, выбрал Maven | Загрузите источники и ... ничего не произошло (нет индикатора выполнения или указания на то, что он что-то делает). Однако он загрузился, так как теперь я могу перейти к исходному тексту на общем языке.

unique72
источник
1

задумался над тем, чтобы использовать настройки в 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>
...

Сначала я подумал, что это по-прежнему не будет прикреплять javadoc и исходники (как я пытался безуспешно с этой опцией -DdownloadSources ранее).

Но сюрприз - при использовании варианта POM файл .classpath получает свои исходные коды и javadoc!

jhohlfeld
источник
1

Для Indigo (и, возможно, Helios) упомянутые выше флажки расположены здесь:

Окно -> Настройки -> Maven

Крис Ромин
источник
0

У меня была похожая проблема, и лучшим решением для меня было включить исходный код в тот же файл jar, что и скомпилированный код (поэтому данный каталог в jar будет включать в себя Foo.javaи Foo.class). Eclipse автоматически связывает источник со скомпилированным кодом и автоматически предоставляет JavaDoc из источника. Очевидно, это полезно, только если вы контролируете артефакт.

Дэн Р.
источник
0

После установки свойств либо на уровне проекта, либо на уровне свойств пользователя выполните Maven -> Обновить проект (принудительное обновление). Скачивает исходники

arkabhi
источник