Plugins 如何最好地利用插件构建Clojure应用程序?
我认为(见下文)我希望将Clojure项目构建为多个模块,具有有序的依赖关系——就像Maven让我处理的那样 但我看不出如何使用Leiningen实现这一点-我所能看到的只是中描述的Plugins 如何最好地利用插件构建Clojure应用程序?,plugins,clojure,gradle,leiningen,Plugins,Clojure,Gradle,Leiningen,我认为(见下文)我希望将Clojure项目构建为多个模块,具有有序的依赖关系——就像Maven让我处理的那样 但我看不出如何使用Leiningen实现这一点-我所能看到的只是中描述的签出修复,它似乎没有那么强大 莱恩会这么做吗?我应该改用Gradle吗?还是不需要这种东西 更多的上下文:我想知道如何构建一个支持插件的模块化应用程序(我想这意味着JAR被转储到类路径上)。我想知道我能在多大程度上把它构造成一个核心+插件(我想我应该能够用Clojure做一些事情,而不必使用Java/OSGi)。因此
签出
修复,它似乎没有那么强大
莱恩会这么做吗?我应该改用Gradle吗?还是不需要这种东西
更多的上下文:我想知道如何构建一个支持插件的模块化应用程序(我想这意味着JAR被转储到类路径上)。我想知道我能在多大程度上把它构造成一个核心+插件(我想我应该能够用Clojure做一些事情,而不必使用Java/OSGi)。因此,我猜单个项目的驱动力来自于希望以某种方式将所有内容(核心+默认插件)打包为单个blob,这对最终用户来说很容易,但也可以进行分割(以片段的形式构建和测试,测试每个模块的逻辑独立性)。欢迎对此提供更一般性的建议
更新
下面没有提到的一个可能的解决方案是使用-我假设它支持Maven所做的一切,但编译Clojure,因此将使用嵌套模块等。首先,Leiningen似乎不像Maven那样支持模块层次结构。退房是下一个最接近它的东西。不过,在Clojure中开发模块化应用程序就足够了 对于项目结构,我将有一个API项目、一个“核心”项目、插件本身和一个单独的打包项目。核心和插件应该只依赖于API。您使用哪个构建工具来创建打包项目取决于您。Gradle可能会更有效地处理包装,但是拥有Leiningen提供的“结帐”功能可以使整个系统的开发更容易 我会看看Leiningen和Noir的代码,找出如何有效地处理这个问题 对于动态加载插件,我将首先查看Noir如何在其两个文件中处理它:
- 为特定命名空间下的所有文件加载命名空间。在它使用的引擎盖下,您可以很容易地看到它是如何使用
来要求特定基础下的每个命名空间的。这也是Leiningen处理自定义任务的方式-任务的基本定义应位于Leiningen.$task命名空间中
- 具有我将用于插件注册的功能。总之,在
下使用一个映射,并向该映射添加插件。我建议用宏包装注册,以保持代码更干净atom
如果您不需要在运行时添加插件,上面列出的内容就足够了。如果在启动过程中类路径上没有每个插件,我建议您利用它向类路径添加条目。您可以在中看到一个例子。Updated:看来Leiningen现在支持模块层次结构。。。根据插件描述。