Clojure/Ring:如何将我的clojure应用程序与我无法控制的java构建过程集成?

pri*_*ing 6 deployment clojure war ring amazon-elastic-beanstalk

我有一个独特的构建情况.我正在使用lein uberwar我的环应用程序构建一个战争并部署到beanstalk.这一切都很有效.现在它出现了一个要求,我们需要将代码推送到一个svn repo,在那里他们将管理构建,它对clojure一无所知(只有java).这是一个庞大的官僚组织,他们的构建过程已经到位,因此将它们安装lein在他们的服务器上是不可能的.我知道lein在引擎盖下使用了maven所以我知道这可以在理论上起作用,但我对这个过程的几个步骤仍有疑问.

我在lein-ring中完成了构建war的过程,我看到的主要挂断是生成servlet和listener类,以及web.xml.我觉得我可以提供执行此任务的java文件,但我不清楚这些java文件将包含哪些内容以及它们最终将存在于项目结构中.看看在最终战争中生成的servlet.clj和listener.clj文件看起来很简单,可能已经存在这样的例子了?

我看到的另一大障碍是war进程调用clojure.core/compile项目命名空间,该命名空间从clojure源生成所有类文件.有没有办法在maven构建期间触发此编译?我几乎想象一个java类,它将编译器转换为clojure.core/compile,但我不确定从java调用clojure的来龙去脉,而不是相反(通常的流程方向),或者如何插入这一步进入了一个基本的maven构建过程.

任何关于从哪里开始的任何见解都是最受欢迎的!谢谢大家.

Art*_*ldt 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>
Run Code Online (Sandbox Code Playgroud)

  • 亚瑟:说真的,你应该开一所Clojure学校,或者至少写一本关于Clojure实习的书. (2认同)

Lau*_*tit 5

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

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

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