2012-10-22 5 views
1

내가 Clojure의 jar 파일을 실행하려고를 실행하고 나는 아래의 오류 경우 : Clojure의 프로젝트 넷빈즈 6.9.1에 받는다는을 사용하여 생성되는ClassNotFoundException가 Clojure의 항아리

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의 코드는 다음과 같습니다 :

(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> 

?

+0

AOT 컴파일이 수행되지 않은 것 같습니다. jar 파일을 확인하고 com/mode/mdzw 경로 구조가 있는지 확인하고 mdzw.class라는 클래스 파일이 있어야합니다. – Ankur

+0

당신은 바로 Ankur입니다. mdzw.class 파일이 아닙니다. 이것을 어떻게 할 수 있습니까? – McKibet

+0

clojure project.clj 파일에': aot : all'을 설정하고'lein jar'을 실행 한 다음 새로 생성 된 jar 파일을 사용하십시오 – Ankur

답변

1

방금 ​​시작한 경우 leiningen을 사용하는 것이 좋습니다. Ankur's advice above을 시도하거나 project.clj에서 :main을 설정할 수 있습니다.

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

그런 다음 lein run을 실행하여 프로그램을 시작하십시오. 병을 원하면 w/o lein을 수행 할 수 있습니다. lein uberjar으로 빌드하십시오.

자세한 내용은 leiningen tutorial을 참조하십시오.

(많이 사용하지는 않았지만) maven을 사용하려면 이미 POM에있는 clojure-maven-plugin에 대한 설명서를 살펴보아야하지만 올바르게 설정하지 않았을 수 있습니다. 그것은 당신이 필요로하는 것을 아마도 달성하는 clojure:compile 목표를 제공합니다.

확실한 질문은 무엇입니까? java -jar C:\Users\Nahashon\.m2\repository\org\enclojure\sample\0.0.1\sample-0.0.1.jar을 실행하기 전에 어떤 목표를 실행하고 있습니까?

+0

Duelin 감사합니다. 나는 내가 시험해 볼 것 같아. 내가 방문한 많은 블로그에서 보았던 권고안을 따르는 것이 겉 모습보다 낫다. – McKibet

+1

leiningen은 더 간단하지만 Clojure 프로젝트를 비롯하여 Clojure 프로젝트를 비롯하여 여기에 표시되는 모든 contrib 프로젝트 (https://github.com/clojure 및 http://build.clojure.org/ 여기 Mbuven을 사용) Maven을 계속 사용하려면 좋은 회사에 있어야합니다. –

+0

McKibet, 이것이 유용했다면 투표로 투표하거나 답변으로 표시 할 수 있습니다. –