Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Plugins 如何最好地利用插件构建Clojure应用程序?_Plugins_Clojure_Gradle_Leiningen - Fatal编程技术网

Plugins 如何最好地利用插件构建Clojure应用程序?

Plugins 如何最好地利用插件构建Clojure应用程序?,plugins,clojure,gradle,leiningen,Plugins,Clojure,Gradle,Leiningen,我认为(见下文)我希望将Clojure项目构建为多个模块,具有有序的依赖关系——就像Maven让我处理的那样 但我看不出如何使用Leiningen实现这一点-我所能看到的只是中描述的签出修复,它似乎没有那么强大 莱恩会这么做吗?我应该改用Gradle吗?还是不需要这种东西 更多的上下文:我想知道如何构建一个支持插件的模块化应用程序(我想这意味着JAR被转储到类路径上)。我想知道我能在多大程度上把它构造成一个核心+插件(我想我应该能够用Clojure做一些事情,而不必使用Java/OSGi)。因此

我认为(见下文)我希望将Clojure项目构建为多个模块,具有有序的依赖关系——就像Maven让我处理的那样

但我看不出如何使用Leiningen实现这一点-我所能看到的只是中描述的
签出
修复,它似乎没有那么强大

莱恩会这么做吗?我应该改用Gradle吗?还是不需要这种东西

更多的上下文:我想知道如何构建一个支持插件的模块化应用程序(我想这意味着JAR被转储到类路径上)。我想知道我能在多大程度上把它构造成一个核心+插件(我想我应该能够用Clojure做一些事情,而不必使用Java/OSGi)。因此,我猜单个项目的驱动力来自于希望以某种方式将所有内容(核心+默认插件)打包为单个blob,这对最终用户来说很容易,但也可以进行分割(以片段的形式构建和测试,测试每个模块的逻辑独立性)。欢迎对此提供更一般性的建议

更新


下面没有提到的一个可能的解决方案是使用-我假设它支持Maven所做的一切,但编译Clojure,因此将使用嵌套模块等。首先,Leiningen似乎不像Maven那样支持模块层次结构。退房是下一个最接近它的东西。不过,在Clojure中开发模块化应用程序就足够了

对于项目结构,我将有一个API项目、一个“核心”项目、插件本身和一个单独的打包项目。核心和插件应该只依赖于API。您使用哪个构建工具来创建打包项目取决于您。Gradle可能会更有效地处理包装,但是拥有Leiningen提供的“结帐”功能可以使整个系统的开发更容易

我会看看Leiningen和Noir的代码,找出如何有效地处理这个问题

对于动态加载插件,我将首先查看Noir如何在其两个文件中处理它:

  • 为特定命名空间下的所有文件加载命名空间。在它使用的引擎盖下,您可以很容易地看到它是如何使用
    来要求特定基础下的每个命名空间的。这也是Leiningen处理自定义任务的方式-任务的基本定义应位于Leiningen.$task命名空间中
  • 具有我将用于插件注册的功能。总之,在
    atom
    下使用一个映射,并向该映射添加插件。我建议用宏包装注册,以保持代码更干净

如果您不需要在运行时添加插件,上面列出的内容就足够了。如果在启动过程中类路径上没有每个插件,我建议您利用它向类路径添加条目。您可以在中看到一个例子。

Updated:看来Leiningen现在支持模块层次结构。。。根据插件描述。