gpt4 book ai didi

java - 将 Clojure 添加到 Java 项目时出现问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:30:11 27 4
gpt4 key购买 nike

我正在开发一个使用 Maven 构建的 Java 项目。我正在开发的功能在 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.xml 中以构建 Clojure 代码:

<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) 中似乎没有被视为源目录。我在项目 View 中右键单击 src/main/clojure 并选择“Mark directory as > Source root”,但是在重新导入 Maven 依赖项(即 Eclipse 中的“Update dependencies”)后,该目录不再标记为源根目录.

这让我相信我的问题出在我的 Maven 配置中。

有人能帮忙吗?

最佳答案

我在我的 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

关于java - 将 Clojure 添加到 Java 项目时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9553718/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com