2014-09-28 5 views
4

Если у вас есть библиотека, вычисленная локально, которая построена с помощью cabal, которая используется приложением. Я хотел бы создать свое приложение против локальной библиотеки, а не что-то из взлома, но я не уверен, как это сделать. Это похоже на то, что я должен был бы сделать, я просто не могу понять, как это сделать.Как создать изолированный проект cabal с пользовательской версией зависимостей, которая не находится на взломе (например, выписка из github)

песочница

В случае это имеет значение или усложняет, приложение в Кабал песочнице с cabal-sandbox-config файла в каталоге маршрута приложения.

То, что я пытаюсь выполнить

Я строй приложения Есода, и я хочу, чтобы настроить поведение одного из зависимостей (Шекспир). Я хотел бы создать свое приложение против моей измененной версии.

ответ

9

Используйте cabal sandbox add-source, который разработан специально для этого прецедента.

Пример:

$ git clone https://github.com/SomeUser/SomeDependency 
$ cd /path/to/my-project 
$ cabal sandbox add-source /path/to/SomeDependency 
$ cabal build 

В качестве бонуса, если вы позже обновить SomeDependency и попытаться восстановить my-project, cabal заметит, что и переустановить SomeDependency.

1

Вариант 1:

Вы можете просто клонировать проект, а затем запустить междусобойчик установить в клонированной каталоге. git clone https://github.com/yesodweb/shakespeare.git

Это даст вам каталог shakespeare, который будет содержать .cabal файл.

Так что просто введите каталог и запустите cabal install. Это установит shakespeare. Теперь продолжайте установку вашего проекта.

Ключевой моменту:

Вам нужно установить Шекспир себя первым, так что, когда вы собираете свой собственный проект, ghc или cabal не пытается установить зависимость Шекспира (от hackage по умолчанию) на своем собственном.

Вариант 2:

  • Установка hackage-server
  • Загрузить копию Шекспира (ваша отлажено версия) на локальный hackage
  • Редактировать ваш междусобойчик конфиг приоритетов местного hackage над haskell- взлом

удаленного репо: hackage.haskell.org: http://hackage.haskell.org/packages/archive

удаленного репо: local.hackage: http://local.hackage/packages/archive

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