java - 尝试使用java和clojure在eclipse中创建maven动态Web项目

标签 java eclipse maven clojure

我已经在 Eclipse 中创建了 maven-archetype-webapp 项目。我想在 Java 中使用 Clojure 代码。 所以,这是我的 core.clj 文件:

(ns coq.core
 (:gen-class
   :name coq.core
    :methods [#^{:static true} [foo [int] void]]))

(defn -foo [i] (println "Hello from Clojure. My input was " i))

(defn -main [] (println "Hello from Clojure -main." ))

pom.xml:

<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>gleboGroup</groupId>
<artifactId>javaandclojure</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>javaandclojure Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>3.8.1</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1-b02</version>
        <type>jar</type>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.clojure</groupId>
        <artifactId>clojure</artifactId>
        <version>1.3.0</version>
    </dependency>
</dependencies>
<build>
    <finalName>javaandclojure</finalName>
    <plugins>
        <plugin>
            <groupId>com.theoryinpractise</groupId>
            <artifactId>clojure-maven-plugin</artifactId>
            <version>1.3.10</version>
            <configuration>
                <sourceDirectories>
                    <sourceDirectory>src/main/clojure</sourceDirectory>
                </sourceDirectories>
                <testSourceDirectories>
                    <testSourceDirectory>src/test/clojure</testSourceDirectory>
                </testSourceDirectories>
            </configuration>
            <executions>
                <execution>
                    <id>compile</id>
                    <phase>compile</phase>
                    <goals>
                        <goal>compile</goal>
                    </goals>
                </execution>
                <execution>
                    <id>test</id>
                    <phase>test</phase>
                    <goals>
                        <goal>test</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.3.2</version>
            <executions>
                <execution>
                    <id>default-compile</id>
                    <phase>compile</phase>
                    <goals>
                        <goal>compile</goal>
                    </goals>
                </execution>
                <execution>
                    <id>default-testCompile</id>
                    <phase>test-compile</phase>
                    <goals>
                        <goal>testCompile</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

我的单个 servlet 在 core.foo(123) 上出现错误:

package com.javaandclojure;

import java.io.IOException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.ServletException;
import javax.servlet.http.*;

import coq.*;

@WebServlet({ "/*"})
public class Main extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        System.out.println("inside get!");
        core.foo(123);// core cannot be resolved
        request.setAttribute("number", 42);
        request.getRequestDispatcher("/index.jsp").forward(request, response);
    }
}

一些 eclipse 的截图:

enter image description here

构建路径:

enter image description here

Maven 构建目标:“clean package”给出了它:

[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building javaandclojure Maven Webapp 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-clean-plugin:2.4.1:clean (default-clean) @ javaandclojure ---
[INFO] Deleting D:\porn\indigo\javaandclojure\target
[INFO] 
[INFO] --- maven-resources-plugin:2.4.3:resources (default-resources) @ javaandclojure ---
[WARNING] Using platform encoding (Cp1251 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO] 
[INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ javaandclojure ---
[WARNING] File encoding has not been set, using platform encoding Cp1251, i.e. build is platform dependent!
[INFO] Compiling 1 source file to D:\porn\indigo\javaandclojure\target\classes
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] \porn\indigo\javaandclojure\src\main\java\com\javaandclojure\Main.java:[10,10] error: package coq does not exist
[ERROR] \porn\indigo\javaandclojure\src\main\java\com\javaandclojure\Main.java:[17,2] error: cannot find symbol
[INFO] 2 errors 
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.042s
[INFO] Finished at: Sun Nov 11 16:28:25 EET 2012
[INFO] Final Memory: 8M/20M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.3.2:compile (default-compile) on project javaandclojure: Compilation failure: Compilation failure:
[ERROR] \porn\indigo\javaandclojure\src\main\java\com\javaandclojure\Main.java:[10,10] error: package coq does not exist
[ERROR] \porn\indigo\javaandclojure\src\main\java\com\javaandclojure\Main.java:[17,2] error: cannot find symbol
[ERROR] -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException

也许我应该使用另一个 Maven 原型(prototype)?

最佳答案

这是因为 Java 编译器在 clojure 编译器之前运行。

如果您强制 Java 编译在 clojure-maven-plugin 之后进行,它将起作用。在 clojure-maven-plugin之后添加这些行:

<plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>2.3.2</version>
    <executions>
        <execution>
            <id>default-compile</id>
            <phase>none</phase>
        </execution>
        <execution>
            <id>default-testCompile</id>
            <phase>none</phase>
        </execution>
        <execution>
            <id>java-compile</id>
            <phase>compile</phase>
            <goals>
                <goal>compile</goal>
            </goals>
        </execution>
        <execution>
            <id>java-testCompile</id>
            <phase>test-compile</phase>
            <goals>
                <goal>testCompile</goal>
            </goals>
        </execution>
    </executions>
</plugin>

关于java - 尝试使用java和clojure在eclipse中创建maven动态Web项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13331309/

相关文章:

java - 一个程序中有多个Elasticsearch连接

java - Tomcat7 war 文件问题

eclipse - JSP EL(表达语言)在Eclipse中引起问题

java - 如何配置 Maven 以进行离线开发?

java - 无法更改 Mac OS 外观中的 JProgressBar 颜色

java - 验证 Spring Controller 参数不为空

java - j2me - 以 45 度为增量旋转 2d 点数组

java - 运行 SynchronizeMappings 时出现 PersistenceException

java - 由于边界原因,maven 拒绝编译泛型类,即使在转换类之后也是如此

java - 如何将插件(从现有 jar 创建)转换为 Maven