2016-06-09 44 views
0

我不能爲我的生活弄清楚如何讓我的Spring項目在IDE之外運行。我正在使用Gradle。我搜索了上下,包括pply插件:'應用'的措辭,我看到罐生成,但當我通過gradlew運行,它死了說它無法找到文件。春天的項目將不會從命令行運行

1)我需要一個單獨的build.gradle文件來運行它嗎?在試圖運行之前,我必須拿出大量其他項目的東西(必須用#刪除所有時間)

2)爲什麼它不工作?我甚至需要一個build.gradle文件嗎?你如何從Spring IDE以最簡單的方式在命令行上運行?搖籃的

apply plugin: 'application' 
    dependencies { 
    compile project(':caffeine')# 
    compile libraries.guava# 

    testCompile test_libraries.junit# 
    testCompile test_libraries.truth# 
    testCompile test_libraries.easymock# 
    testCompile test_libraries.guava_testlib# 
    compile group: 'org.apache.activemq', name: 'activemq-kahadb-store', version: '5.13.3' 
    compile group: 'org.apache.activemq', name: 'activemq-all', version: '5.13.3' 
    } 

    jar.manifest {# 
    name 'com.github.ben-manes.caffeine.guava'# 
    instruction 'Import-Package',# 
     'com.google.common.cache',# 
     'com.github.benmanes.caffeine.cache',# 
     'com.github.benmanes.caffeine.cache.stats'# 
    instruction 'Export-Package',# 
     'com.github.benmanes.caffeine.guava'# 
    }# 

    jar { 
     baseName = 'gs-gradle' 
     version = '0.1.0' 
    } 

    tasks.withType(Javadoc) { 
    options.addStringOption('Xdoclint:none', '-quiet') 
    } 
    repositories { 
    mavenCentral() 
    } 
    test {# 
    systemProperty 'guava.osgi.version', versions.guava# 
    systemProperty 'caffeine.osgi.jar', 
    project(':caffeine').jar.archivePath.path# 
    systemProperty 'caffeine-guava.osgi.jar',#  
    project(':guava').jar.archivePath.path# 
    }# 
    mainClassName = 'org.apache.activemq.store.kahadb.disk.util.DiskMark' 

編輯輸出用剝離的build.gradle:

Total time: 0.579 secs 
    tareks-MacBook-Pro:distributions tarekzegar$ gradlew run --stacktrace 
    :compileJava UP-TO-DATE 
    :processResources UP-TO-DATE 
    :classes UP-TO-DATE 
    :run 
    Error: Could not find or load main class org.apache.activemq.store.kahadb.disk.util.DiskMark 
    :run FAILED 

    FAILURE: Build failed with an exception. 

    * What went wrong: 
    Execution failed for task ':run'. 
    > Process 'command '/Library/Java/JavaVirtualMachines/jdk1.8.0_91.jdk/Contents/Home/bin/java'' finished with non-zero exit value 

EDIT2: 感謝您的響應。我使用disk.util.DiskBenchmark並修改了特定的文件,因爲我需要添加一個緩存,因此我的名爲DiskMark.Java。這裏是我的DiskMark的前幾行

package org.apache.activemq.store.kahadb.disk.util; 

    import java.io.File; 
    import java.io.RandomAccessFile; 
    import java.util.ArrayList; 
    import java.util.Arrays; 
    import java.util.concurrent.Callable; 
    import java.util.concurrent.ExecutionException; 
    import java.util.Random; 
    import java.util.Iterator; 

    import com.github.benmanes.caffeine.cache.Caffeine; 
    import com.github.benmanes.caffeine.cache.RemovalCause; 
    import com.github.benmanes.caffeine.cache.RemovalListener; 
    import com.github.benmanes.caffeine.guava.CaffeinatedGuava; 
    import com.google.common.cache.Cache; 

    import org.apache.activemq.util.RecoverableRandomAccessFile; 

    /** 
    * This class is used to get a benchmark the raw disk performance. 
    */ 
    public class DiskMark { 

    private static final boolean SKIP_METADATA_UPDATE = 
    Boolean.getBoolean("org.apache.activemq.file.skipMetadataUpdate"); 

    boolean verbose; 
    // reads and writes work with 4k of data at a time. 
    int bs = 1024 * 4; 
    // Work with 100 meg file. 
    long size = 1024 * 1024 * 500; 
    long sampleInterval = 10 * 1000; 
    static Cache<Long, byte[]> cache; 
    static Callable<byte[]> loader; 
    static ArrayList<Long> longIndexList; 
    boolean enableCache = true; 

    public static void main(String[] args) { 

我應該採取不同的方式嗎?它在IDE

EDIT運行正常3: 我感動的java文件在src/main/java下一個新的包,包的名字是DiskCharacterize,類名DiskMark。還是不是工作。

我這個的build.gradle

/** 
    * Guava compatibility adapter. 
    * 
    * The tests are forked from Guava commit e370dde. 
    */ 
    apply plugin: 'application' 
    dependencies { 
    compile project(':caffeine') 
    compile libraries.guava 

    testCompile test_libraries.junit 
    testCompile test_libraries.truth 
    testCompile test_libraries.easymock 
    testCompile test_libraries.guava_testlib 
    compile group: 'org.apache.activemq', name: 'activemq-kahadb-store', version: '5.13.3' 
    compile group: 'org.apache.activemq', name: 'activemq-all', version: '5.13.3' 
    } 

    jar.manifest { 
    name 'com.github.ben-manes.caffeine.guava' 
    instruction 'Import-Package', 
     'com.google.common.cache', 
     'com.github.benmanes.caffeine.cache', 
     'com.github.benmanes.caffeine.cache.stats' 
    instruction 'Export-Package', 
     'com.github.benmanes.caffeine.guava' 
    } 


    jar { 
     baseName = 'gs-gradle' 
     version = '0.1.0' 
    } 

    tasks.withType(Javadoc) { 
    options.addStringOption('Xdoclint:none', '-quiet') 
    } 
    repositories { 
    mavenCentral() 
    } 
    test { 
    systemProperty 'guava.osgi.version', versions.guava 
    systemProperty 'caffeine.osgi.jar', project(':caffeine').jar.archivePath.path 
    systemProperty 'caffeine-guava.osgi.jar', project(':guava').jar.archivePath.path 
    } 
    mainClassName = 'DiskCharacterize.DiskMark' 

我切換到/編譯/庫/目錄,其中GS-gradle這個-0.1.0.jar存在建造它。我填充此目錄與此的build.gradle

/** 
    * Guava compatibility adapter. 
    * 
    * The tests are forked from Guava commit e370dde. 
    */ 
    apply plugin: 'application' 
    /*dependencies { 
    compile project(':caffeine') 
    compile libraries.guava 

    testCompile test_libraries.junit 
    testCompile test_libraries.truth 
    testCompile test_libraries.easymock 
    testCompile test_libraries.guava_testlib 
    compile group: 'org.apache.activemq', name: 'activemq-kahadb-store', version: '5.13.3' 
    compile group: 'org.apache.activemq', name: 'activemq-all', version: '5.13.3' 
    } 

    jar.manifest { 
    name 'com.github.ben-manes.caffeine.guava' 
    instruction 'Import-Package', 
     'com.google.common.cache', 
     'com.github.benmanes.caffeine.cache', 
     'com.github.benmanes.caffeine.cache.stats' 
    instruction 'Export-Package', 
     'com.github.benmanes.caffeine.guava' 
    }*/ 

    jar { 
     baseName = 'gs-gradle' 
     version = '0.1.0' 
    } 

    tasks.withType(Javadoc) { 
    options.addStringOption('Xdoclint:none', '-quiet') 
    } 
    repositories { 
    mavenCentral() 
    } 
    /*test { 
    systemProperty 'guava.osgi.version', versions.guava 
    systemProperty 'caffeine.osgi.jar', project(':caffeine').jar.archivePath.path 
    systemProperty 'caffeine-guava.osgi.jar', project(':guava').jar.archivePath.path 
    }*/ 
    mainClassName = 'DiskCharacterize.DiskMark' 

它失敗

xxxxxx$ gradlew run 
    :compileJava UP-TO-DATE 
    :processResources UP-TO-DATE 
    :classes UP-TO-DATE 
    :run 
    Error: Could not find or load main class DiskCharacterize.DiskMark 
    :run FAILED 

    FAILURE: Build failed with an exception. 

    * What went wrong: 
    Execution failed for task ':run'. 
    > Process 'command '/Library/Java/JavaVirtualMachines/jdk1.8.0_91.jdk/Contents/Home/bin/java'' finished with non-zero exit value 1 

這是怎麼回事?我需要它來運行,不能爲我的生活弄清楚

EDIT4: gradle這個運行不起作用,即使申請插件:「Java」作爲補充,插件應用隱式調用Java插件反正。

但是,我得到它運行。我去../build/distributions/文件夾,它們都有番石榴-2.3.1-SNAPSHOT.tar & guava-2.3.1-SNAPSHOT.zip,我解壓zip文件,找到一個bash文件並簡單地執行它;程序運行。爲什麼Gradle運行不起作用對我來說是未知的(如果您有任何想法,我仍然非常想知道)。謝謝大家你幫順便說一句,謝謝你奔M.

+0

您可以在此處添加Gradle輸出以顯示它正在搜索但未找到的文件? – romeara

+0

添加失敗的輸出 –

+0

文件源路徑../Documents/caffeine-master/guava/src/test/java/org/apache/activemq/store/kahadb/disk/util/DiskMark.java –

回答

0
根據新信息

編輯答案:

基礎上Gradle Application Plugin Documentation反對「主要來源集」運行命令運行。您嘗試運行的類位於src/test下,它不是Gradle默認源位置的一部分(並且基於名稱,如果它是測試源位置的一部分)。看看Gradle Java Plugin文檔(45.2),以更好地描述什麼源集以及如何改變它們,比我可能在這裏給出:)

簡短的回答/建議:將你的包和文件移動到一個名爲src的源文件夾中/ src/test中的/ main/java允許Gradle運行找到它所期望的類(你可以選擇重新配置源集,但這對你的情況來說似乎是過分的)

Old Answer(Based on Flawed Assessment of錯字嘗試使用庫提供的類):

我假設您正在嘗試運行類org.apache.activemq.store.kahadb.disk.util.DiskMark作爲您的主要課程。基於這個類的名字,我猜你正在嘗試使用你的build.gradle文件中的activemq-kahadb依賴關係(相對於使用幾乎與activemq-kahadb結構幾乎相同的包結構編寫它)

對於您所依賴的版本,似乎沒有該名稱的類(基於package tree)。我沒有找到任何具有該名稱的類的ActiveMQ版本。有一個叫做org.apache.activemq.store.kahadb.disk.util.DiskBenchmark的類,它包含一個主要方法 - 是你想要調用的嗎?

+0

請參閱edit2瞭解響應。謝謝 –

+0

啊,我明白了 - 所以你確實用了相同的合格軟件包名稱和稍微不同的類名。你的源碼結構中的那個文件在哪裏? (projectDir/src,projectDir/src/main/java等) – romeara

+0

../Documents/caffeine-master/guava/src/test/java/org/apache/activemq/store/kahadb/disk/util/DiskMark.java –

0

看着你了DiskMark源和你所得到的錯誤信息時,DiskMark類(即包名+類名)的全名是:org.apache.activemq.store.kahadb.disk.util.DiskMark,不DiskCharacterize.DiskMark。因此,班級無法找到。

解決辦法有兩個:

解決方案#1:告訴gradle這個尋找合適的班級:

mainClassName = 'org.apache.activemq.store.kahadb.disk.util.DiskMark' 

此外,作爲項目組織,在每個文件的存儲位置的事你項目應該與你班級的包裹相匹配。在DiskMark的情況下,路徑應該是:

%ProjectRoot%/src/main/java/org/apache/activemq/store/kahadb/disk/util/DiskMark.java

解決方案#2:改變你的類的包裝(和其他任何需要匹配)

package DiskCharacterize; 
//... 
public class DiskMark { 
    //... 
} 

文件位置:

%projectRoot%/src/main/java/DiskCharacterize/DiskMark.java 

此解決方案是有效的,但您當前的包DiskCharacterize不遵守java風格約定(並且使得DiskMark看起來像那些不熟悉你的代碼的內部類)。

因此,我強烈建議將兩種解決方案相結合,並將您的軟件包名稱更改爲使用全小寫的軟件包名稱。 org.tarek.diskcharacterize將是您的包裹的一個非常合適的名稱。

相關問題