Я думаю, что большинство из Вас будет знать, программисты часто код повторного использования из другого программного обеспечения. Я думаю, большую часть времени это - хорошая идея. Но если Вы используете код из другого проекта, Ваша программа зависит от другого проекта.
Я мой текущий случай я получил три проекта A Java, B и C. Теперь использование B и B использует C. Я использую, затмевают IDE и добавил B к buildpath A и C к buildpath B. Теперь существует ошибка компилятора, что A не может разрешить что-то от C. Таким образом, я должен добавить C к buildpath B.
Таким образом, каков лучший способ, для разрешения зависимостей при сохранении программы максимально независимой от других проектов?
Я хотел бы знать, в целом и в отношении моей текущей ситуации. Там лучшие пути состоят в том, чтобы сделать это? Т.е. существуют настройки пути к классу в запуске / представление настройки отладочного процесса, но я думаю, что они не помогут во время компиляции.
Заранее спасибо.
Похоже, это часть проблемы, установленной Maven. Используя Maven и Eclipse, а именно m2eclipse, вы можете использовать в проектах другие проекты, и все разрешения зависимостей выполняются за вас.
Мне кажется, что вы делаете то, что должны, без включения таких инструментов управления зависимостями, как Ivy или Maven, которые предоставляют вам возможность «управления транзитивными зависимостями». С помощью любого из этих инструментов вы можете просто указать, что A зависит от B, а B зависит от C, и они автоматически узнают, что A также понадобится C.
Преимущества Maven (это то, в чем у меня есть опыт) также вступает в игру, когда это ' Пришло время упаковать ваши проекты для развертывания, поскольку он может легко собрать все эти зависимости (на всем пути вниз по иерархии) и поместить их вместе в папку распространения или в толстый JAR, содержащий все ваши зависимости. Чтобы использовать такой инструмент, как Maven, требуется некоторое время на чтение и настройку, но это значительно упрощает задачу управления вашими зависимостями, особенно по мере их роста.
Мы используем Maven, и это важно для наших проектов. Это хорошее время для вас, чтобы учиться - зависимости от более чем трех проектов могут пугать. Maven имеет дело с версиями, так что если по какой-либо причине вам придется полагаться на Foo.1.2.3, то Maven гарантирует, что вы не получите неправильную версию.
Однако это нетривиально. Если вы используете Netbeans, он лучше встроен, чем Eclipse, и может помочь вам в обучении. (Также проекты довольно легко переключаются между двумя системами.)
Maven поддерживает множество концепций в своем файле POM (pom.xml), включая информацию о лицензии, участников, аргументы и т. Д., Поэтому вы получаете гораздо больше, чем просто управление зависимостями. . И он поддерживает модуляризацию проектов.
Не пропускайте кривую обучения - вам нужно знать, как это работает.
Используйте maven для управления своими зависимостями, а затем используйте плагин зависимостей, чтобы увидеть зависимости.
вы можете запустить
mvn dependency: analysis
или
mvn dependency: tree -Dverbose = true
это вам очень поможет.
без сомнения, вы должны использовать инструмент управления зависимостями, как уже заметили люди ... вручную, однако архив B и C в B_C.jar. Проверьте, что зависимость B от C решена в Jar.
Затем добавьте B_C.jar в путь к классам ...
Управление зависимостями - огромная тема. Maven, Плющ и другие инструменты были разработаны, чтобы облегчить боль с некоторым успехом. Оба этих инструмента создают иерархию зависимостей, чтобы вы не попали в описанную вами ситуацию. У них также есть плагины Eclipse, чтобы Eclipse распознал эту иерархию.
Чтобы по-настоящему использовать эти фреймворки, вам придется изменить текущий процесс сборки. Maven, вероятно, требует большего внимания, чем Ivy, но ни то, ни другое не является тривиальным, и понимание того, как его настроить, требует времени. Тем не менее, очень полезно четко определять и управлять своими зависимостями.
Чтобы по-настоящему использовать эти фреймворки, вам придется изменить текущий процесс сборки. Maven, вероятно, требует большего внимания, чем Ivy, но ни то, ни другое не является тривиальным, и понимание того, как его настроить, требует времени. Тем не менее, очень полезно четко определять и управлять своими зависимостями.
Чтобы по-настоящему использовать эти фреймворки, вам придется изменить текущий процесс сборки. Maven, вероятно, требует большего внимания, чем Ivy, но ни то, ни другое не является тривиальным, и понимание того, как его настроить, требует времени. Тем не менее, очень полезно четко определять и управлять своими зависимостями.
Другие упоминали несколько хороших инструментов, из которых 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. В этом примере обнаружить это довольно тривиально, но иногда это не так.И если от таких разговоров у вас немного кружится голова, и вы не планируете, чтобы ваш проект стал намного сложнее ... тогда вы, вероятно, сможете просто продолжайте какое-то время заниматься тем, чем вы занимаетесь. Как отмечали другие, это правильный способ сделать это без помощи инструмента.
И если от таких разговоров у вас немного кружится голова, и вы не планируете, чтобы ваш проект стал намного сложнее ... тогда вы, вероятно, можете просто придерживаться того, что делаете, какое-то время. Как отмечали другие, это правильный способ сделать это без помощи инструмента.
И если от таких разговоров у вас немного кружится голова, и вы не планируете, чтобы ваш проект стал намного сложнее ... тогда вы, вероятно, можете просто придерживаться того, что делаете, какое-то время. Как отмечали другие, это правильный способ сделать это без помощи инструмента.