Как успешно установить уберграф - PullRequest
0 голосов
/ 05 апреля 2019

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

Я следовал краткому руководству по ubergraphs github https://github.com/Engelberg/ubergraph и сумел выполнить первый шаг (добавление ubergraph к зависимостям leiningen).Я скачал git-репозиторий и не знаю, как продолжить.Выполнение примера кода

(ns example.core
  (:require [ubergraph.core :as uber]))

(def graph1
  (uber/graph [:a :b] [:a :c] [:b :d]))

в реплее, как описано на github, приводит к следующей ошибке:

CompilerException java.lang.NullPointerException, compiling: (ubergraph / core.clj: 11: 1)

Строка, которая, по-видимому, вызывает ошибку в core.clj:

(import-vars
 [...])

Я пропустил переменные, поскольку не думаю, что они вызывают проблему.Clojure работает на правильной версии (1.9.0) и Java 8 установлен.Помощь приветствуется, спасибо заранее.

1 Ответ

0 голосов
/ 05 апреля 2019

Исходя из вашего комментария «Кроме того, я должен поместить библиотеку где-то определенно?», Это, кажется, вызвано неправильным пониманием того, как установить библиотеку. Вы не должны вручную иметь дело с такими вещами; leiningen выполняет установку библиотеки для вас.

Вот краткое руководство, предполагающее, что вы еще не создали проект. Если у вас есть, перейдите к шагу 2.

  1. Выполнить lein new app you-project-name-here. Это создаст пустой проект с project.clj и базовой файловой структурой. Если вы используете IDE, например IntelliJ + Cursive, создание нового проекта сделает этот шаг автоматически.

  2. Войдите в ваш project.clj и добавьте [ubergraph "0.5.2"] к записи :dependencies. Как минимальный уменьшенный пример, он должен выглядеть примерно так:

    (defproject example "0.1.0-SNAPSHOT"
        :dependencies [[org.clojure/clojure "1.10.0"]
                       [ubergraph "0.5.2"]]
    
        :main example.core) ; The path to your core
    
  3. У вас есть core как что-то вроде:

    (ns example.core
      (:require [ubergraph.core :as uber])
      (:gen-class))
    
    (def graph1
      (uber/graph [:a :b] [:a :c] [:b :d]))
    
    (defn -main
      "I don't do a whole lot ... yet."
      [& args]
      (println "The graph:" graph1))
    
  4. Теперь запустите lein run. Вы должны увидеть загрузку зависимостей, а затем напечатать что-то вроде этого беспорядка:

    The graph: {:node-map {:a #ubergraph.core.NodeInfo{:out-edges {:b #{#ubergraph.core.UndirectedEdge{:id #uuid "0768ef5b-1507-4bb0-b3da-fc14a84d013d", :src :a, :dest :b, :mirror? false}}, :c #{#ubergraph.core.UndirectedEdge{:id #uuid "acddd770-52cc-4b1f-aec1-762861e70ee2", :src :a, :dest :c, :mirror? false}}}, :in-edges {:b #{#ubergraph.core.UndirectedEdge{:id #uuid "0768ef5b-1507-4bb0-b3da-fc14a84d013d", :src :b, :dest :a, :mirror? true}}, :c #{#ubergraph.core.UndirectedEdge{:id #uuid "acddd770-52cc-4b1f-aec1-762861e70ee2", :src :c, :dest :a, :mirror? true}}}, :out-degree 2, :in-degree 2}, :b #ubergraph.core.NodeInfo{:out-edges {:a #{#ubergraph.core.UndirectedEdge{:id #uuid "0768ef5b-1507-4bb0-b3da-fc14a84d013d", :src :b, :dest :a, :mirror? true}}, :d #{#ubergraph.core.UndirectedEdge{:id #uuid "ef931d4e-8143-4cd1-8a10-c3692c47072f", :src :b, :dest :d, :mirror? false}}}, :in-edges {:a #{#ubergraph.core.UndirectedEdge{:id #uuid "0768ef5b-1507-4bb0-b3da-fc14a84d013d", :src :a, :dest :b, :mirror? false}}, :d #{#ubergraph.core.UndirectedEdge{:id #uuid "ef931d4e-8143-4cd1-8a10-c3692c47072f", :src :d, :dest :b, :mirror? true}}}, :out-degree 2, :in-degree 2}, :c #ubergraph.core.NodeInfo{:out-edges {:a #{#ubergraph.core.UndirectedEdge{:id #uuid "acddd770-52cc-4b1f-aec1-762861e70ee2", :src :c, :dest :a, :mirror? true}}}, :in-edges {:a #{#ubergraph.core.UndirectedEdge{:id #uuid "acddd770-52cc-4b1f-aec1-762861e70ee2", :src :a, :dest :c, :mirror? false}}}, :out-degree 1, :in-degree 1}, :d #ubergraph.core.NodeInfo{:out-edges {:b #{#ubergraph.core.UndirectedEdge{:id #uuid "ef931d4e-8143-4cd1-8a10-c3692c47072f", :src :d, :dest :b, :mirror? true}}}, :in-edges {:b #{#ubergraph.core.UndirectedEdge{:id #uuid "ef931d4e-8143-4cd1-8a10-c3692c47072f", :src :b, :dest :d, :mirror? false}}}, :out-degree 1, :in-degree 1}}, :allow-parallel? false, :undirected? true, :attrs {}, :cached-hash #object[clojure.lang.Atom 0x16da1abc {:status :ready, :val -1}]}
    

Я подозреваю, что NPE был из-за того, что вы как-то установили ubergraph, но не позволили ему автоматически разрешить свои зависимости. Когда он попытался запустить import-vals, одна из библиотек, от которой он зависит, не была найдена, и это привело к сбоям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...