有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

maven在向Java项目添加Clojure时遇到的问题

我正在从事一个Java项目,它使用Maven来构建它。我正在开发的一些功能在Java中相当麻烦,但在Clojure中却非常简单,因此我想在Clojure中实现它,并让Java无缝地使用生成的类

下面是我需要通过的单元测试(src/test/java/com/foo/weather/DataProcessorTest.java):

package com.foo.weather;

import static org.junit.Assert.*;
import org.junit.Test;
import java.util.*;

public class DataProcessorCljTest {
   @Test
   public void processWithTotalsAndSubTotals() throws Exception {
      assertEquals(2, DataProcessor.process(createRawData()).size());
   }

   private List<List<String>> createRawData() {
      List<List<String>> data = new ArrayList<List<String>>();
      data.add(new ArrayList<String>(Arrays.asList("2011-11-01", "Temperature", "19.2")));
      data.add(new ArrayList<String>(Arrays.asList("2011-11-01", "Pressure", "1.1")));
      return data;
   }
}

下面是Clojure代码(src/main/Clojure/com/foo/weather/data processor.clj):

(ns com.foo.weather.DataProcessor
  (:gen-class
    :methods [#^{:static true} [process [java.util.List] java.util.List]]))

(defn process [raw-data]
  (java.util.ArrayList. []))

我已将以下内容添加到我的pom中。用于构建Clojure代码的xml:

<project>
   <!-- lots of stuff omitted -->
   <build>
      <plugins>
         <!-- ... -->
         <plugin>
            <groupId>com.theoryinpractise</groupId>
            <artifactId>clojure-maven-plugin</artifactId>
            <version>1.3.6</version>
            <executions>
               <execution>
                 <id>compile</id>
                 <phase>compile</phase>
                 <goals>
                   <goal>compile</goal>
                 </goals>
               </execution>
            </executions>
         </plugin>
      </plugins>
   </build>
   <repositories>
      <!-- ... -->
      <repository>
         <id>clojure-releases</id>
         <url>http://build.clojure.org/releases</url>
       </repository>
   </repositories>
   <dependencies>
      <!-- ... -->
      <dependency>
         <groupId>org.clojure</groupId>
         <artifactId>clojure</artifactId>
         <version>1.2.1</version>
       </dependency>
   </dependencies>
</project>

然而,当试图运行我的单元测试时,编译器抱怨“找不到符号变量DataProcessor”,因此我的Clojure代码似乎没有被正确编译

我注意到的一件事是,我的src/main/clojure目录似乎没有被当作IDE(IntelliJ)中的源目录。我在项目视图中右键单击src/main/clojure并选择“将目录标记为>;源根目录”,但在重新导入Maven依赖项(即Eclipse中的“更新依赖项”)后,该目录不再标记为源根目录

这让我相信我的问题在于我的Maven配置

有人能帮忙吗


共 (1) 个答案

  1. # 1 楼答案

    我在pom中使用以下内容。似乎有效的xml:

            <plugin>
                <groupId>com.theoryinpractise</groupId>
                <artifactId>clojure-maven-plugin</artifactId>
                <version>1.3.8</version>
    
                <executions>
                    <!  ...  >
                    <execution>
                        <id>test-clojure</id>
                        <phase>test</phase>
                        <goals>
                            <goal>test</goal>
                        </goals>
                    </execution>
                </executions>
    
                <configuration>
                    <sourceDirectories>
                        <sourceDirectory>src/main/clojure</sourceDirectory>
                    </sourceDirectories>
                    <testSourceDirectories>
                        <testSourceDirectory>src/test/clojure</testSourceDirectory>
                    </testSourceDirectories>
                </configuration>
            </plugin>
    

    此外,我还发现,如果将Clojure源文件包含在资源目录中,Clojure也可以正常工作(当然,您显然需要从Java代码中加载它们)

    你可能也会发现这个问题很有帮助:Calling clojure from java