Blog Kokosa

.NET i okolice, wydajność, architektura i wszystko inne

NAVIGATION - SEARCH

MemoryVisualizer - Paket - dodanie Neo4j

W poprzednim wpisie zmieniłem system zarządzania zależnościami z Nugeta na Paket. Ściąganie paczek Nugetowych skonwertowało się automatycznie za pomocą dołączonego narzędzia, teraz pora dodać główny cel tych zabiegów - archiwum z przenośną (samowystarczalną) wersją Neo4j.

Jest ona dostępna pod poniższym adresem i trochę waży:

$ wget http://neo4j.com/artifact.php?name=neo4j-community-3.0.1-windows.zip
...
Length: 62661995 (60M) [application/zip]

Aby dodać taką zależność musimy ją dodać do pliku packet.dependencies:

$ more paket.dependencies
source https://www.myget.org/F/roslyn-nightly/
source https://www.myget.org/F/dotnet-core
source https://www.nuget.org/api/v2/
framework >= net45

nuget FsXaml.Wpf 0.9.9
nuget Microsoft.Diagnostics.Runtime 0.8.31-beta

http http://neo4j.com/artifact.php?name=neo4j-community-3.0.1-windows.zip

Musimy oczywiście dodać taką zależność do konkretnego projektu, w moim przypadku modyfikuję plik src\MemoryVisualizer.UI\paket.references:

FsXaml.Wpf
Microsoft.Diagnostics.Runtime
File:neo4j.zip

I jeśli teraz wykonamy install, spotka nas niemiła niespodzianka:

$ .paket\paket.exe install
Paket version 2.64.3.0
Paket failed with:
        Niedozwolone znaki w ścieżce.
Paket czepia się najwyraźniej obecności ?, czyli query stringa. Raczej skandal. Prosta sztuczka z encodowaniem nie pomoże:

http "http://neo4j.com/artifact.php%3Fname=neo4j-community-3.0.1-windows.zip"

Bo uzyskamy jedynie:

Paket failed with:
        Could not download from http://neo4j.com/artifact.php%3fname=neo4j-community-3.0.1-windows.zip
 Message: Wystąpił przynajmniej jeden błąd.
 Details: Serwer zdalny zwrócił błąd: (404) Nie znaleziono.
Słabo to wygląda. Już się zaczynałem obawiać, że będzie trzeba dłubać w kodzie Paketa i coś naprawiać. Ale trochę trudno było mi uwieżyć, że http dependency nie wspiera query stringów. Natchnęło mnie, że ten niedozwolony znak w ścieżce powstaje w nazwie pliku wynikowego. Paket domyślnie zapisuje wynikowy plik w podkatalogu paket-files, w pliku o nazwie na podstawie podanego URL. Zatem w tym przypadku być może próbuje tu też użyć query stringa, czyli niedozwolonego w nazwie pliku symbolu ?. A ponieważ istnieje opcjonalny argument zależności http podający do jakiego pliku należy zapisać zasób, postanowiłem spróbować i zmieniłem paket.dependencies na:

http "http://neo4j.com/artifact.php?name=neo4j-community-3.0.1-windows.zip" neo4j.zip

Po wykonaniu paket install, bingo!

$ .paket\paket.exe install
Paket version 2.64.3.0
Skipping resolver for group Main since it is already up-to-date
c:\Projects\MemoryVisualizer\paket.lock is already up-to-date
Downloading neo4j.com/:/artifact.php?name=neo4j-community-3.0.1-windows.zip neo4j.zip to c:\Projects\MemoryVisualizer\paket-files\neo4j.com\neo4j.zip

I po ściągnięciu powstaje nam plik paket-files\neo4j.com\neo4j.zip.

Zgodnie z dokumentacją, Paket jest na tyle sprytny, że wie co z zrobić z plikiem ściągniętym przez http, na podstawie rozszerzenia. Jeśli rozszerzenie pliku pasuje do typu projektu, w którym jest on użyty, to zostaje w projekcie włączony do kompilacji. Jednak typ archiwum ZIP oczywiście tak nie zostanie obsłużony. Paket gdy nie wie co zrobić z plikiem, dodaje go to projektu jako "Conent":

paket4

I bardzo dobrze, będzie go łatwiej użyć w przyszłości.

Zatem na chwilę obecną, misja wykonana! W następnym kroku musimy zmodyfikować proces buildowania aby rozpakował tego zipa. A w jeszcze następnym tak zmodyfikować kod, by przy uruchamianiu/zamykaniu aplikacji uruchamiał/zatrzymywał silnik Neo4j.

blog comments powered by Disqus