6

我有一个独特的构建情况。我正在使用lein uberwar我的环应用程序构建战争并部署到 beanstalk。这一切都很好。现在出现了一个要求,我们需要将代码推送到一个 svn 存储库,在那里他们将管理构建,它对 clojure(仅 java)一无所知。这是一个庞大的官僚组织,他们的构建过程已经到位,所以让他们安装lein在他们的服务器上目前是不可能的。我知道 lein 在引擎盖下使用了 maven,所以我知道这在理论上可行,但我仍然对这个过程的几个步骤持怀疑态度。

我经历了lein-ring中的战争构建过程,我看到的主要问题是生成了 servlet 和 listener 类,以及 web.xml。我觉得我可以提供执行此任务的 java 文件,但不清楚这些 java 文件将包含什么以及它们最终将存在于项目结构中的什么位置。查看最终战争中生成的 servlet.clj 和 listener.clj 文件,它们看起来非常简单,可能已经存在这方面的示例?

我看到的另一个大障碍是战争进程调用clojure.core/compile了项目命名空间,它从 clojure 源生成所有类文件。在从 maven 构建期间是否有某种方法可以触发此编译?我几乎在想象一个 java 类,它将编译外包给 clojure.core/compile,但我不确定从 java 调用 clojure 的来龙去脉,而不是反之亦然(通常的流动方向),或者如何插入这一步进入一个基本的 Maven 构建过程。

任何关于从哪里开始的见解都将受到欢迎!谢谢大家。

4

3 回答 3

7

查看Zi maven 插件。您将它指定为子项目中的插件pom.xml,然后它填充与 javac 插件在项目其余部分中所做的相同的滚动。项目之外的任何人都不需要知道 Clojure 的存在。

查看自述文件了解详细信息

 <build>
  <plugins>
    <plugin>
      <groupId>org.cloudhoist.plugin</groupId>
      <artifactId>zi</artifactId>
      <version>0.5.5</version>
      <executions>
        <execution>
          <id>default-compile</id>
          <goals>
            <goal>compile</goal>
          </goals>
        </execution>
      </executions>
      <configuration>
        <excludes>
          <exclude>**/test.clj</exclude>
        </excludes>
      </configuration>
    </plugin>
  </plugins>
</build>
于 2012-09-18T19:21:47.347 回答
5

您可能对我的名为 ring-java-servlet 的库感兴趣。

它提供的是一个已经 AOT 编译的通用 servlet 类,然后可以在 web.xml 中将其声明为常规 servlet。它使用常规的 servlet 初始化参数来声明必须将 servlet 服务调用委托给的处理程序的名称空间和 var 名称。

https://github.com/laurentpetit/ring-java-servlet

于 2012-09-18T23:58:42.550 回答
1

或者你可以看看maven clojure 插件

于 2012-09-19T11:09:11.733 回答