我正在寻找一个不那么琐碎的java/clojure互操作示例

我正在寻找一个不那么琐碎的java/clojure互操作示例,java,interop,clojure,aot,Java,Interop,Clojure,Aot,有人想回答我的问题吗 ,通过提供一个清晰的示例,对于我们这些试图在现有java堆栈中偷偷使用clojure的人来说?只需传递一个原始(非类型化)集合即可。你真的不需要关心类型-它们只是一个编译器技巧,在运行时会被丢弃。从Chas Emerick对我的回答中,我已经设置了这个小型maven项目: interop ---- domainobjects ---- IFoo.java ---- TypedObject.java

有人想回答我的问题吗
,通过提供一个清晰的示例,对于我们这些试图在现有java堆栈中偷偷使用clojure的人来说?

只需传递一个原始(非类型化)集合即可。你真的不需要关心类型-它们只是一个编译器技巧,在运行时会被丢弃。

从Chas Emerick对我的回答中,我已经设置了这个小型maven项目:

interop ---- domainobjects ---- IFoo.java
                           ---- TypedObject.java
                           ---- pom.xml

        ---- functional    ---- fooimpl.clj
                           ---- pom.xml

        ---- consumer      ---- JavaConsumer.java
                           ---- JavaConsumerTest.groovy
                           ---- pom.xml
        ---- pom.xml

######################################################################################

package com.tobeconsumed.byjava;

import java.util.List;

public interface IFoo {
    List<TypedObject> createListOfTypedObjects(String message);
}


package com.tobeconsumed.byjava;

public class TypedObject {

    private String property;

    public String getProperty() {
        return property;
    }

    public void setProperty(String property) {
        this.property = property;
    }
}

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <artifactId>interop</artifactId>
    <groupId>interop</groupId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  <groupId>interop</groupId>
  <artifactId>domainobjects</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>domainobjects</name>
  <description>Contains all of the domain objects.</description>

  <dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.8.1</version>
        <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.codehaus.groovy</groupId>
      <artifactId>groovy-all</artifactId>
      <version>1.7.4</version>
    </dependency>    
  </dependencies>

  <build>

    <finalName>domainobjects</finalName>

    <plugins>
        <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.3.1</version>
        <configuration>
          <source>1.6</source>
          <target>1.6</target>
          <project>
            <build>
                <scriptSourceDirectory>src/main/java</scriptSourceDirectory>
                <testSourceDirectory>src/test/java</testSourceDirectory>
            </build>
          </project>
        </configuration>
        <executions>
         <execution>
           <id>compile</id>
           <phase>compile</phase>
           <goals>
             <goal>compile</goal>
           </goals>
         </execution>
         <execution>
           <id>test-java</id>
           <phase>test</phase>
           <goals>
             <goal>testCompile</goal>
           </goals>
         </execution>
       </executions>
      </plugin>
      <plugin>
        <groupId>org.codehaus.gmaven</groupId>
        <artifactId>gmaven-plugin</artifactId>
        <version>1.2</version>
        <extensions>true</extensions>
        <configuration>
            <project>
            <build>
                <sourceDirectory>src/main/groovy</sourceDirectory>
                <testSourceDirectory>src/test/groovy</testSourceDirectory>
            </build>
            </project>
        </configuration>
      </plugin>
      <plugin>
    <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-antrun-plugin</artifactId>
            <executions>
                <execution>
                    <id>compile</id>
                    <phase>compile</phase>
                    <configuration>
                        <tasks>
                            <mkdir dir="${basedir}/src/main/groovy"/>
                            <taskdef name="groovyc"
                                classname="org.codehaus.groovy.ant.Groovyc">
                                <classpath refid="maven.compile.classpath"/>
                            </taskdef>
                            <mkdir dir="${project.build.outputDirectory}"/>
                            <groovyc destdir="${project.build.outputDirectory}"
                                srcdir="${basedir}/src/main/groovy/" listfiles="true">
                                <classpath refid="maven.compile.classpath"/>
                            </groovyc>
                        </tasks>
                    </configuration>
                    <goals>
                        <goal>run</goal>
                    </goals>
                </execution>
                <execution>
                    <id>test-compile</id>
                    <phase>test-compile</phase>
                    <configuration>
                        <tasks>
                            <mkdir dir="${basedir}/src/test/groovy"/>
                            <taskdef name="groovyc"
                                classname="org.codehaus.groovy.ant.Groovyc">
                                <classpath refid="maven.compile.classpath"/>
                            </taskdef>
                            <mkdir dir="${project.build.testOutputDirectory}"/>
                            <groovyc destdir="${project.build.testOutputDirectory}"
                                srcdir="${basedir}/src/test/groovy/" listfiles="true">
                                <classpath refid="maven.test.classpath"/>
                            </groovyc>
                        </tasks>
                    </configuration>
                    <goals>
                        <goal>run</goal>
                    </goals>
                </execution>
            </executions>
       </plugin>      
    </plugins>
  </build>

</project>


######################################################################################

(ns com.tobeconsumed.byjava.fooimpl
  (:import com.tobeconsumed.byjava.IFoo)
  (:gen-class
    :implements [com.tobeconsumed.byjava.IFoo]))

(defn -createListOfTypedObjects
  "Creates and returns a list of TypedObjects"
  [this message]
  (println message)
  [(TypedObject.), (TypedObject.), (TypedObject.), (TypedObject.)])

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <artifactId>interop</artifactId>
    <groupId>interop</groupId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  <groupId>interop</groupId>
  <artifactId>functional</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>functional</name>
  <description>Some functional code.</description>

  <repositories>
    <repository>
      <id>clojars</id>
      <url>http://clojars.org/repo/</url>
    </repository>
    <repository>
      <id>clojure-releases</id>
      <url>http://build.clojure.org/releases</url>
    </repository>
    <repository>
      <id>clojure-snapshots</id>
      <url>http://build.clojure.org/snapshots</url>
    </repository>
    <repository>
      <id>central</id>
      <url>http://repo1.maven.org/maven2</url>
    </repository>
  </repositories>

  <dependencies>
    <dependency>
      <groupId>interop</groupId>
      <artifactId>domainobjects</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.clojure</groupId>
      <artifactId>clojure</artifactId>
      <version>1.2.0</version>
      <type>pom</type>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.clojure</groupId>
      <artifactId>clojure-contrib</artifactId>
      <version>1.2.0</version>
      <type>pom</type>
      <scope>compile</scope>
    </dependency>
  </dependencies>

  <build>
    <plugins>
        <plugin>
        <groupId>com.theoryinpractise</groupId>
        <artifactId>clojure-maven-plugin</artifactId>
        <version>1.3.3</version>
        <configuration>
            <project>
                <build>
                    <sourceDirectory>src/main/clojure</sourceDirectory>
                    <testSourceDirectory>src/test/clojure</testSourceDirectory>
                </build>
            </project>
        </configuration>
        <executions>
         <execution>
           <id>compile</id>
           <phase>compile</phase>
           <goals>
             <goal>compile</goal>
           </goals>
         </execution>
         <execution>
           <id>test-clojure</id>
           <phase>test</phase>
           <goals>
             <goal>test</goal>
           </goals>
         </execution>
       </executions>
      </plugin>
    </plugins>
  </build>

</project>


######################################################################################



package consumer;

import java.util.List;

import com.tobeconsumed.byjava.IFoo;
import com.tobeconsumed.byjava.TypedObject;
import com.tobeconsumed.byjava.fooimpl;

public class JavaConsumer {

    public List<TypedObject> callCreateListOfTypedObjects() {
        IFoo foo = new fooimpl();
        List<TypedObject> listOfTypedObject = foo.createListOfTypedObjects("Returning typed a list");
        return listOfTypedObject;
    }

}


package consumer;

import junit.framework.TestCase;

public class JavaConsumerTest extends TestCase {

    private JavaConsumer javaConsumer;

    protected void setUp() throws Exception {
        javaConsumer = new JavaConsumer();
        super.setUp();
    }

    protected void tearDown() throws Exception {
        javaConsumer = null;
        super.tearDown();
    }

    public void testCallShowMessage() {
        assertNotNull(javaConsumer);
        def result = javaConsumer.callCreateListOfTypedObjects();

        assert 4 == result.size()
    }

}


<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <artifactId>interop</artifactId>
    <groupId>interop</groupId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  <groupId>interop</groupId>
  <artifactId>consumer</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  <name>consumer</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>interop</groupId>
      <artifactId>functional</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>interop</groupId>
      <artifactId>domainobjects</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.8.1</version>
        <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.codehaus.groovy</groupId>
      <artifactId>groovy-all</artifactId>
      <version>1.7.4</version>
    </dependency>    
  </dependencies>
  <build>

    <finalName>consumer</finalName>

    <plugins>
        <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.3.1</version>
        <configuration>
          <source>1.6</source>
          <target>1.6</target>
          <project>
            <build>
                <scriptSourceDirectory>src/main/java</scriptSourceDirectory>
                <testSourceDirectory>src/test/java</testSourceDirectory>
            </build>
          </project>
        </configuration>
        <executions>
         <execution>
           <id>compile</id>
           <phase>compile</phase>
           <goals>
             <goal>compile</goal>
           </goals>
         </execution>
         <execution>
           <id>test-java</id>
           <phase>test</phase>
           <goals>
             <goal>testCompile</goal>
           </goals>
         </execution>
       </executions>
      </plugin>
      <plugin>
        <groupId>org.codehaus.gmaven</groupId>
        <artifactId>gmaven-plugin</artifactId>
        <version>1.2</version>
        <extensions>true</extensions>
        <configuration>
            <project>
            <build>
                <sourceDirectory>src/main/groovy</sourceDirectory>
                <testSourceDirectory>src/test/groovy</testSourceDirectory>
            </build>
            </project>
        </configuration>
      </plugin>
      <plugin>
    <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-antrun-plugin</artifactId>
            <executions>
                <execution>
                    <id>compile</id>
                    <phase>compile</phase>
                    <configuration>
                        <tasks>
                            <mkdir dir="${basedir}/src/main/groovy"/>
                            <taskdef name="groovyc"
                                classname="org.codehaus.groovy.ant.Groovyc">
                                <classpath refid="maven.compile.classpath"/>
                            </taskdef>
                            <mkdir dir="${project.build.outputDirectory}"/>
                            <groovyc destdir="${project.build.outputDirectory}"
                                srcdir="${basedir}/src/main/groovy/" listfiles="true">
                                <classpath refid="maven.compile.classpath"/>
                            </groovyc>
                        </tasks>
                    </configuration>
                    <goals>
                        <goal>run</goal>
                    </goals>
                </execution>
                <execution>
                    <id>test-compile</id>
                    <phase>test-compile</phase>
                    <configuration>
                        <tasks>
                            <mkdir dir="${basedir}/src/test/groovy"/>
                            <taskdef name="groovyc"
                                classname="org.codehaus.groovy.ant.Groovyc">
                                <classpath refid="maven.compile.classpath"/>
                            </taskdef>
                            <mkdir dir="${project.build.testOutputDirectory}"/>
                            <groovyc destdir="${project.build.testOutputDirectory}"
                                srcdir="${basedir}/src/test/groovy/" listfiles="true">
                                <classpath refid="maven.test.classpath"/>
                            </groovyc>
                        </tasks>
                    </configuration>
                    <goals>
                        <goal>run</goal>
                    </goals>
                </execution>
            </executions>
       </plugin>      
    </plugins>
  </build>
</project>

######################################################################################

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>interop</groupId>
  <artifactId>interop</artifactId>
  <packaging>pom</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>interop</name>

  <repositories>
    <repository>
      <id>central</id>
      <url>http://repo1.maven.org/maven2</url>
    </repository>
  </repositories>

  <dependencies>
  </dependencies>

  <build>
    <plugins>
    </plugins>
  </build>
  <modules>
    <module>functional</module>
    <module>consumer</module>
    <module>domainobjects</module>
  </modules>

</project>
interop----domainobjects----IFoo.java
----TypedObject.java
----pom.xml
----functional---fooimpl.clj
----pom.xml
----消费者——JavaConsumer.java
----JavaConsumerTest.groovy
----pom.xml
----pom.xml
######################################################################################
包com.tobeconsumed.byjava;
导入java.util.List;
公共接口IFoo{
列出CreateListofTypedObject(字符串消息);
}
包com.tobeconsumed.byjava;
公共类类型对象{
私有财产;
公共字符串getProperty(){
归还财产;
}
公共void setProperty(字符串属性){
this.property=属性;
}
}
4.0.0
互操作
互操作
0.0.1-快照
互操作
域对象
0.0.1-快照
域对象
包含所有域对象。
朱尼特
朱尼特
4.8.1
测试
org.codehaus.groovy
groovy all
1.7.4
域对象
org.apache.maven.plugins
maven编译器插件
2.3.1
1.6
1.6
src/main/java
src/test/java
编译
编译
编译
测试java
测试
测试编译
org.codehaus.gmaven
gmaven插件
1.2
真的
src/main/groovy
src/test/groovy
org.apache.maven.plugins
maven antrun插件
编译
编译
跑
测试编译
测试编译
跑
######################################################################################
(ns com.tobeconsumed.byjava.fooimpl)
(:import com.tobeconsumed.byjava.IFoo)
(:gen类
:实现[com.tobeconsumed.byjava.IFoo]))
(defn-createListOfTypedObjects
“创建并返回类型对象列表”
[此消息]
(println消息)
[(类型对象.,(类型对象.,(类型对象.,(类型对象.,(类型对象.)]))
4.0.0
互操作
互操作
0.0.1-快照
互操作
功能的
0.0.1-快照
功能的
一些功能代码。
clojars
http://clojars.org/repo/
clojure释放
http://build.clojure.org/releases
clojure快照
http://build.clojure.org/snapshots
中心的
http://repo1.maven.org/maven2
互操作
域对象
0.0.1-快照
编译
org.clojure
clojure
1.2.0
聚甲醛
编译
org.clojure
clojure contrib
1.2.0
聚甲醛
编译
理论与实践
clojure maven插件
1.3.3
src/main/clojure
src/test/clojure
编译
编译
编译
测试clojure
测试
测试
######################################################################################
包装消费者;
导入java.util.List;
导入com.tobeconsumed.byjava.IFoo;
导入com.tobeconsumed.byjava.TypedObject;
导入com.tobeconsumed.byjava.fooimpl;
公共类JavaConsumer{
public List callCreateListOfTypedObjects()公共列表调用{
IFoo foo=new fooimpl();
List listOfTypedObject=foo.CreateListofTypedObject(“返回类型化列表”);
返回类型对象列表;
}
}
包装消费者;
导入junit.framework.TestCase;
公共类JavaConsumerTest扩展了TestCase{
私人JavaConsumer JavaConsumer;
受保护的void setUp()引发异常{
javaConsumer=新的javaConsumer();
super.setUp();
}
受保护的void tearDown()引发异常{
javaConsumer=null;
super.tearDown();
}
public void testCallShowMessage(){
assertNotNull(javaConsumer);
def result=javaConsumer.callCreateListOfTypedObjects();
阿瑟