Разработка проекта Java Eclipse как для 32-битных, так и для 64-битных систем Linux.

У меня есть ряд связанных проектов, которые я поместил под контроль Git (все эти проекты находятся в одной рабочей области, которая является верхним уровнем репозитория Git) и клонировал с моего рабочего стола (32-разрядная версия) на мой ноутбук (64-разрядная версия). так что я могу работать над ними где угодно. Папка рабочей области .metadata исключена, но все в папках проекта отслеживается.

Когда я открыл клонированное рабочее пространство на ноутбуке, меня встретила ошибка:

Project 'project' is missing required library:
'/usr/eclipse/plugins/org.eclipse.swt.gtk.linux.x86_3.5.2.v3557f.jar'

Очевидно, что 64-битное затмение не имеет 32-битных библиотек, но мне любопытно, как это решить.

Эта библиотека была добавлена ​​как часть шаблона проекта Window Builder SWT/JFace. В папке плагинов eclipse есть org.eclipse.swt_3.5.2.v3557f.jar, но изменение пути к классам для поиска не работает (как ни странно, не находит SWT). Просматривая остальную часть файла .classpath для проектов SWT/JFace, эта конкретная библиотека является единственной, которая настолько специфична для платформы.

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

Могу ли я просто связать 64-битную банку на ноутбуке с 32-битным именем, чтобы путь к классам мог найти библиотеку? Есть ли другое, лучшее решение?

ОБНОВЛЕНИЕ: похоже, что этот тип проекта должен зависеть от конкретного фрагмента SWT, поэтому, пока не будет лучшего решения, я собираюсь символически связать рассматриваемые фрагменты на обеих машинах, чтобы направить компилятор к правильный фрагмент. Создание/запуск проектов на других машинах (и особенно на Windows) будет !!Весело!! но я построю этот мост, когда доберусь туда.


person Erik Youngren    schedule 03.12.2010    source источник
comment
Если подумать, какого черта писать пути к классам с путями, специфичными для платформы? Если бы я перенес это на компьютер с Windows, он не смог бы найти ничего из того, что ему нужно для запуска... Черт, документы на странице кода Google говорят, что пути к классам начинаются с C:/eclipse/plugins/   -  person Erik Youngren    schedule 05.12.2010


Ответы (4)


Что именно вы храните в своем исходном контроле?

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

Я думаю, у вас проблема с настройками IDE для вашего 64-битного Eclipse, которые не работают с 32-битным.

Просто удалите каталог .metadata в своей рабочей области и заново импортируйте все проекты в этот Eclipse.

person Goran Jovic    schedule 03.12.2010
comment
И, конечно же, поместите .metadata в список игнорирования, чтобы вы не переопределили их при следующем коммите. - person Goran Jovic; 04.12.2010
comment
Только папки проекта и пустой README верхнего уровня, оставшийся после первого коммита. Итак, исходный код и файлы конфигурации для каждого проекта, в основном. .metadata бросили в игнор, когда я заметил, что это несколько мегабайт. - person Erik Youngren; 04.12.2010
comment
О да, вы также должны удалить .settings из каталога вашего проекта. - person Goran Jovic; 04.12.2010
comment
Вы должны хранить в своем репозитории только исходники, различные xml-конфиги и тому подобное. Только ваш код, а не вещи, связанные с IDE. - person Goran Jovic; 04.12.2010

Не делайте этого со всем рабочим пространством. Просто сделайте это с отдельными проектами. Здесь хорошо работает.

person Thorbjørn Ravn Andersen    schedule 03.12.2010
comment
Все проекты в этой конкретной рабочей области логически связаны, но не настолько, чтобы быть одним и тем же проектом. Я хочу их в одном репозитории. - person Erik Youngren; 04.12.2010
comment
Это можно сделать, добавив в репозиторий каждый проект Eclipse по отдельности. Не добавляйте всю рабочую область. - person Thorbjørn Ravn Andersen; 04.12.2010
comment
Вспоминая, что я делал, чтобы получить их все в репозитории (что касается Eclipse — как вручную указать eclipse, что проект находится под контролем git, это другой вопрос), я на самом деле делал именно это. - person Erik Youngren; 05.12.2010
comment
Создайте папку git и поместите все проекты в папку git, а затем просто добавьте их все A в любую другую папку. Не забудьте игнорировать папки bin. - person Thorbjørn Ravn Andersen; 05.12.2010

Какой тип проекта вы разрабатываете? Java-проект или подключаемый модуль?

Если вы разрабатываете проект подключаемого модуля, ваш проект не должен напрямую зависеть от конкретного фрагмента swt (например, swt.gtk, swt.win32). Это должно зависеть от подключаемого модуля хоста «org.eclipse.swt», что фактическая реализация swt — это разные фрагменты на разных платформах.

Если вы разрабатываете Java-проект, требующий swt в качестве стороннего требования. Вы можете установить дельта-пакет eclipse как для 32-битного, так и для 64-битного eclipse.

person Kane    schedule 04.12.2010
comment
Теперь мы получаем где-то. Я подумал, что это странно, что он включает что-то настолько конкретное, но я предположил, что шаблон проекта знает, что он делает. Я начинал с Java-проекта WindowBuilder SWT/JFace, который автоматически добавлял эти библиотеки. Замена его на общий jar приводит к тому, что он не знает, что такое SWT. - person Erik Youngren; 05.12.2010
comment
@Artanis, прежде всего, механизм реализации swt решает, что он не является чисто кроссплатформенным, который использует jni для вызова нативной библиотеки. Тогда проект WindowBuilder SWT/Jface является проектом java, он помещает все подключаемые модули eclipse, на которые ссылаются, в путь к классам для сборки и запуска. Он не использует osgi для обработки пути к классам, хотя для этого также требуется jar osgi. Таким образом, проект должен зависеть от конкретной реализации SWT для сборки и тестирования. - person Kane; 06.12.2010
comment
@Artanis, если вы используете WindowTester для тестирования своего проекта rcp, я предлагаю вам создать тест подключаемого модуля junit, который может хорошо справиться с такой проблемой. - person Kane; 06.12.2010

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

person Gerbrand    schedule 04.12.2010