1

我正在尝试运行 clojure jar 文件,但出现以下错误:

C:\Users\Nahashon>java -jar C:\Users\Nahashon\.m2\repository\org\enclojure\sample\0.0.1\sample-0.0.1.jar
Exception in thread "main" java.lang.NoClassDefFoundError: com/mode/mdzw

Caused by: java.lang.ClassNotFoundException: com.mode.mdzw
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
Could not find the main class: com.mode.mdzw. Program will exit.

clojure 项目是在 netbeans 6.9.1 上使用 maven 创建的。并且clojure代码如下:

(ns com.mode.mdzw
(:gen-class))

(defn -main []
(println "Looks like it works!"))

POM 文件如下:

<?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">
<properties>
    <clojure.version>1.1.0</clojure.version>
</properties>
<modelVersion>4.0.0</modelVersion>
<groupId>org.enclojure</groupId>
<artifactId>sample</artifactId>
<version>0.0.1</version>
<name>mdzw</name>
<description>mdzw</description>
<build>
 <sourceDirectory>src/main/clojure</sourceDirectory>
 <testSourceDirectory>src/test/clojure</testSourceDirectory>
    <resources>
        <resource>
            <directory>src/main/clojure</directory>
        </resource>
        <resource>
            <directory>src/main/resources</directory>
        </resource>
    </resources>
    <testResources>
        <testResource>
            <directory>src/test/clojure</directory>
        </testResource>
    </testResources>
<plugins>
  <plugin>
    <groupId>com.theoryinpractise</groupId>
    <artifactId>clojure-maven-plugin</artifactId>
    <version>1.3.2</version>
    <configuration>
        <sourceDirectories>
            <sourceDirectory>src/main/clojure</sourceDirectory>
        </sourceDirectories>
        <clojureOptions>-Xmx1G</clojureOptions>
    </configuration>
    <executions>
      <execution>
        <id>compile-clojure</id>
        <phase>compile</phase>
        <goals>
          <goal>compile</goal>
        </goals>
      </execution>
    </executions>
  </plugin>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
      <source>1.5</source>
      <target>1.5</target>
    </configuration>
  </plugin>

  <!-- -->
   <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <configuration>
            <archive>
                <manifest>
                    <addClasspath>true</addClasspath>
                    <mainClass>classes.com.mode.mdzw</mainClass>
                    <classpathPrefix>dependency</classpathPrefix>
                </manifest>
            </archive>
        </configuration>
    </plugin>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <executions>
            <execution>
                <id>copy-dependencies</id>
                <phase>package</phase>
                <goals>
                    <goal>copy-dependencies</goal>
                </goals>
            </execution>
        </executions>
    </plugin>

</plugins>
</build>
<repositories>
  <repository>
  <id>central</id>
  <url>http://repo1.maven.org/maven2</url>
  </repository>
<repository>
  <id>clojure-releases</id>
  <url>http://build.clojure.org/releases</url>
</repository>
<repository>
  <id>incanter</id>
  <url>http://repo.incanter.org</url>
</repository>
<repository>
  <id>clojure-snapshots</id>
  <url>http://build.clojure.org/snapshots</url>
</repository>
<repository>
  <id>clojars</id>
  <url>http://clojars.org/repo/</url>
</repository>
</repositories>
<dependencies>
  <dependency>
   <groupId>org.clojure</groupId>
   <artifactId>clojure</artifactId>
   <version>${clojure.version}</version>
  </dependency>
  <dependency>
   <groupId>org.clojure</groupId>
   <artifactId>clojure-contrib</artifactId>
   <version>${clojure.version}</version>
  </dependency>
  <dependency>
   <groupId>swank-clojure</groupId>
   <artifactId>swank-clojure</artifactId>
   <version>1.1.0-SNAPSHOT</version>
    <exclusions>
      <exclusion>
        <groupId>org.clojure</groupId>
        <artifactId>clojure</artifactId>
      </exclusion>
      <exclusion>
        <groupId>org.clojure</groupId>
        <artifactId>clojure-contrib</artifactId>
      </exclusion>
    </exclusions>
   </dependency>
  </dependencies>
</project>

我做错了什么?

4

1 回答 1

1

如果您刚刚开始,我建议您使用leiningen,此时您可以尝试上面的 Ankur 建议:main在 project.clj 中设置一个。

(defproject org.enclojure/sample "0.1.0-SNAPSHOT"
  :dependencies [[org.clojure/clojure "1.4.0"]]
  :main com.mode.mdzw)

然后只需运行lein run即可启动您的程序。如果你想要一个 jar,你可以在没有 lein 的情况下执行,用lein uberjar.

有关更多信息,请参阅leiningen 教程

如果您想坚持使用 maven(我没有使用太多),您可能应该查看clojure-maven-plugin的文档,该文档已经在您的 pom 中,但可能设置不正确。它提供了一个clojure:compile可能满足您需要的目标。

我想一个明显的问题是,你在跑步之前要达到什么目标java -jar C:\Users\Nahashon\.m2\repository\org\enclojure\sample\0.0.1\sample-0.0.1.jar

于 2012-10-23T14:51:56.627 回答