Что лучший способ состоит в том, чтобы разрешить зависимости между проектами Java?

Я думаю, что большинство из Вас будет знать, программисты часто код повторного использования из другого программного обеспечения. Я думаю, большую часть времени это - хорошая идея. Но если Вы используете код из другого проекта, Ваша программа зависит от другого проекта.

Я мой текущий случай я получил три проекта A Java, B и C. Теперь использование B и B использует C. Я использую, затмевают IDE и добавил B к buildpath A и C к buildpath B. Теперь существует ошибка компилятора, что A не может разрешить что-то от C. Таким образом, я должен добавить C к buildpath B.

Таким образом, каков лучший способ, для разрешения зависимостей при сохранении программы максимально независимой от других проектов?

Я хотел бы знать, в целом и в отношении моей текущей ситуации. Там лучшие пути состоят в том, чтобы сделать это? Т.е. существуют настройки пути к классу в запуске / представление настройки отладочного процесса, но я думаю, что они не помогут во время компиляции.

Заранее спасибо.

8
задан c0d3x 18 December 2009 в 16:59
поделиться

8 ответов

Похоже, это часть проблемы, установленной Maven. Используя Maven и Eclipse, а именно m2eclipse, вы можете использовать в проектах другие проекты, и все разрешения зависимостей выполняются за вас.

7
ответ дан 5 December 2019 в 12:59
поделиться

Мне кажется, что вы делаете то, что должны, без включения таких инструментов управления зависимостями, как Ivy или Maven, которые предоставляют вам возможность «управления транзитивными зависимостями». С помощью любого из этих инструментов вы можете просто указать, что A зависит от B, а B зависит от C, и они автоматически узнают, что A также понадобится C.

Преимущества Maven (это то, в чем у меня есть опыт) также вступает в игру, когда это ' Пришло время упаковать ваши проекты для развертывания, поскольку он может легко собрать все эти зависимости (на всем пути вниз по иерархии) и поместить их вместе в папку распространения или в толстый JAR, содержащий все ваши зависимости. Чтобы использовать такой инструмент, как Maven, требуется некоторое время на чтение и настройку, но это значительно упрощает задачу управления вашими зависимостями, особенно по мере их роста.

2
ответ дан 5 December 2019 в 12:59
поделиться

Мы используем Maven, и это важно для наших проектов. Это хорошее время для вас, чтобы учиться - зависимости от более чем трех проектов могут пугать. Maven имеет дело с версиями, так что если по какой-либо причине вам придется полагаться на Foo.1.2.3, то Maven гарантирует, что вы не получите неправильную версию.

Однако это нетривиально. Если вы используете Netbeans, он лучше встроен, чем Eclipse, и может помочь вам в обучении. (Также проекты довольно легко переключаются между двумя системами.)

Maven поддерживает множество концепций в своем файле POM (pom.xml), включая информацию о лицензии, участников, аргументы и т. Д., Поэтому вы получаете гораздо больше, чем просто управление зависимостями. . И он поддерживает модуляризацию проектов.

Не пропускайте кривую обучения - вам нужно знать, как это работает.

1
ответ дан 5 December 2019 в 12:59
поделиться

Используйте maven для управления своими зависимостями, а затем используйте плагин зависимостей, чтобы увидеть зависимости.

вы можете запустить

mvn dependency: analysis

или

mvn dependency: tree -Dverbose = true

это вам очень поможет.

1
ответ дан 5 December 2019 в 12:59
поделиться

без сомнения, вы должны использовать инструмент управления зависимостями, как уже заметили люди ... вручную, однако архив B и C в B_C.jar. Проверьте, что зависимость B от C решена в Jar.

Затем добавьте B_C.jar в путь к классам ...

1
ответ дан 5 December 2019 в 12:59
поделиться

Управление зависимостями - огромная тема. Maven, Плющ и другие инструменты были разработаны, чтобы облегчить боль с некоторым успехом. Оба этих инструмента создают иерархию зависимостей, чтобы вы не попали в описанную вами ситуацию. У них также есть плагины Eclipse, чтобы Eclipse распознал эту иерархию.

Чтобы по-настоящему использовать эти фреймворки, вам придется изменить текущий процесс сборки. Maven, вероятно, требует большего внимания, чем Ivy, но ни то, ни другое не является тривиальным, и понимание того, как его настроить, требует времени. Тем не менее, очень полезно четко определять и управлять своими зависимостями.

Чтобы по-настоящему использовать эти фреймворки, вам придется изменить текущий процесс сборки. Maven, вероятно, требует большего внимания, чем Ivy, но ни то, ни другое не является тривиальным, и понимание того, как его настроить, требует времени. Тем не менее, очень полезно четко определять и управлять своими зависимостями.

Чтобы по-настоящему использовать эти фреймворки, вам придется изменить текущий процесс сборки. Maven, вероятно, требует большего внимания, чем Ivy, но ни то, ни другое не является тривиальным, и понимание того, как его настроить, требует времени. Тем не менее, очень полезно четко определять и управлять своими зависимостями.

0
ответ дан 5 December 2019 в 12:59
поделиться

Другие упоминали несколько хороших инструментов, из которых maven, вероятно, является наиболее распространенным. Ivy - еще один, который больше ориентирован только на управление зависимостями. Я лично использую gradle, у которого есть одни из лучших из всех этих функций под знакомой классной оболочкой ... которая все еще развивается и тщательно документируется. ;)

Следует знать, как эти инструменты обрабатывают транзитивные зависимости. В вашем примере C является транзитивной зависимостью от A, потому что A зависит от B, который зависит от C. Некоторые из этих инструментов сборки будут обрабатывать этот тип зависимости по-разному, и это может вас удивить, когда вы меньше всего этого ожидаете.

Например, если A на самом деле относится к коду из C, то есть: он имеет зависимость времени компиляции от C, тогда ваша настройка A-> B-> C будет работать в чем-то вроде Maven. На другом конце gradle также заставит вас объявить, что A зависит от C ... поскольку это так. Зависимости времени выполнения полностью разрешаются в любом случае.

Удивление возникает, когда вы транзитивно включаете что-то в течение нескольких месяцев, а часть вашего кода полагается на аспекты C, и вы решаете, что вам больше не нужна зависимость B. Внезапно ваш код не будет компилироваться, пока вы не выясните, что вам нужна указанная зависимость A-> C. В этом примере обнаружить это довольно тривиально, но иногда это не так.

И если от таких разговоров у вас немного кружится голова, и вы не планируете, чтобы ваш проект стал намного сложнее ... тогда вы, вероятно, сможете просто продолжайте какое-то время заниматься тем, чем вы занимаетесь. Как отмечали другие, это правильный способ сделать это без помощи инструмента.

Зависимости времени выполнения полностью разрешаются в любом случае.

Удивление возникает, когда вы транзитивно включаете что-то в течение нескольких месяцев, а часть вашего кода полагается на аспекты C, и вы решаете, что вам больше не нужна зависимость B. Внезапно ваш код не будет компилироваться, пока вы не выясните, что вам нужна указанная зависимость A-> C. В этом примере обнаружить это довольно тривиально, но иногда это не так.

И если от таких разговоров у вас немного кружится голова, и вы не планируете, чтобы ваш проект стал намного сложнее ... тогда вы, вероятно, сможете просто продолжайте какое-то время заниматься тем, что вы делаете. Как отмечали другие, это правильный способ сделать это без помощи инструмента.

Зависимости времени выполнения полностью разрешаются в любом случае.

Удивление случается, когда вы транзитивно включаете что-то в течение нескольких месяцев, а часть вашего кода полагается на аспекты C, и вы решаете, что вам больше не нужна зависимость B. Внезапно ваш код не будет компилироваться, пока вы не выясните, что вам нужна указанная зависимость A-> C. В этом примере обнаружить это довольно тривиально, но иногда это не так.

И если от таких разговоров у вас немного кружится голова, и вы не планируете, чтобы ваш проект стал намного сложнее ... тогда вы, вероятно, сможете просто продолжайте какое-то время заниматься тем, что вы делаете. Как отмечали другие, это правильный способ сделать это без помощи инструмента.

Мы транзитивно включали что-то в течение нескольких месяцев, и часть вашего кода опиралась на аспекты C, и вы решили, что вам больше не нужна зависимость B. Внезапно ваш код не будет компилироваться, пока вы не выясните, что вам нужна указанная зависимость A-> C. В этом примере обнаружить это довольно тривиально, но иногда это не так.

И если от таких разговоров у вас немного кружится голова, и вы не планируете, чтобы ваш проект стал намного сложнее ... тогда вы, вероятно, сможете просто продолжайте какое-то время заниматься тем, что вы делаете. Как отмечали другие, это правильный способ сделать это без помощи инструмента.

Мы транзитивно включали что-то в течение нескольких месяцев, и часть вашего кода опиралась на аспекты C, и вы решили, что вам больше не нужна зависимость B. Внезапно ваш код не будет компилироваться, пока вы не выясните, что вам нужна указанная зависимость A-> C. В этом примере обнаружить это довольно тривиально, но иногда это не так.

И если от таких разговоров у вас немного кружится голова, и вы не планируете, чтобы ваш проект стал намного сложнее ... тогда вы, вероятно, сможете просто продолжайте какое-то время заниматься тем, чем вы занимаетесь. Как отмечали другие, это правильный способ сделать это без помощи инструмента.

И если от таких разговоров у вас немного кружится голова, и вы не планируете, чтобы ваш проект стал намного сложнее ... тогда вы, вероятно, можете просто придерживаться того, что делаете, какое-то время. Как отмечали другие, это правильный способ сделать это без помощи инструмента.

И если от таких разговоров у вас немного кружится голова, и вы не планируете, чтобы ваш проект стал намного сложнее ... тогда вы, вероятно, можете просто придерживаться того, что делаете, какое-то время. Как отмечали другие, это правильный способ сделать это без помощи инструмента.

1
ответ дан 5 December 2019 в 12:59
поделиться

Бесплатные книги maven:

http://www.sonatype.com/documentation/books

0
ответ дан 5 December 2019 в 12:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: