2015-06-11 201 views
7

我基本上想做一些簡單的事情 - 或者至少我認爲它應該非常簡單。intellij構建包含gradle依賴項的jar工件

我的目標是創建一個Intellij gradle項目,使用gradle爲模塊添加一些依賴項並向其添加一些java源代碼。

然後,我只是想有一個選項,以某種方式編譯整個事情到1罐,包含所有年級的依賴,並能夠使用「Java的罐子」

然而事實證明來執行,這是不是容易是我以爲。

我剛剛從intellij創建了一個新的gradle項目並添加了一個Main類。

I'll給你一個概述了我的文件:

settings.gradle:

rootProject.name = 'gradleTestNewJar' 

的build.gradle:

apply plugin: 'java' 
apply plugin: 'idea' 
apply plugin: 'application' 

sourceCompatibility = 1.6 
version = '1.0' 

repositories { 
    mavenCentral() 
} 

mainClassName = "com.randomPackage.StarterClass" 

    dependencies { 

     compile 'org.seleniumhq.selenium:selenium-java:2.46.0' 

     testCompile group: 'junit', name: 'junit', version: '4.11' 
    } 

主類:

package com.randomPackage; 

import com.gargoylesoftware.htmlunit.BrowserVersion; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.htmlunit.HtmlUnitDriver; 

public class StarterClass { 

    public static void main(String[] args){ 
     System.out.println("test"); 

     WebDriver driver = new HtmlUnitDriver(BrowserVersion.FIREFOX_38); 
     driver.quit(); 

    } 
} 

「MyStart」的主要方法是通過調試從Intellij運行時執行。 因此,它正常工作,當所有的依賴關係得到正確加載。

注意:如果這有什麼區別,我使用Intellij Community Edition。

我的嘗試:

1.我想只是用 「gradlew乾淨構建」。

這創建了一個jar,但沒有libs。 但我沒有想到它會如此簡單。

我試圖去構建模塊的神器作爲這裏建議:

http://blog.jetbrains.com/idea/2010/08/quickly-create-jar-artifact/

我用提取的,而不是依賴提取嘗試過。 在這兩種情況下,依賴關係都被添加到jar中,但它們被添加到jar的根目錄中。 當我試圖運行通過「Java的罐子」的jar文件,它抱怨:

"Exception in thread "main" java.lang.NoClassDefFoundError: org/openqa/selenium/WebDriver 
..." 

OK,所以它不能夠加載的依賴關係。
注:我認爲依賴關係沒有添加到類路徑,但我不確定這一點。但是,我期望Intellij向類路徑添加依賴關係(或者在清單文件中聲明)

3.我也嘗試使用gradle應用程序插件。

但是,這會創建一個包含執行腳本和bin文件夾的zip/tar,這不是我的目的。

因此,我開始使用谷歌搜索幾個小時,但我無法找到解決我的問題。

來吧,這不能這麼難 - 它是如此基本。

我相信有些天才能幫助我,並指出我對我 - 可能是愚蠢的 - 失敗。

回答

7

我目前的解決方案如下:

我使用gradle這個建立一個包含所有庫罐子,我做這個叫fatJar難熬自定義任務。

這裏是我的build.gradle

apply plugin: 'java' 

jar { 
    manifest { 
     attributes("Manifest-Version": "1.0", 
       "Main-Class": "com.randomPackage.MainClass"); 
    } 
} 

task fatJar(type: Jar) { 
    manifest.from jar.manifest 
    classifier = 'all' 
    from { 
     configurations.runtime.collect { it.isDirectory() ? it : zipTree(it) } 
    } { 
     exclude "META-INF/*.SF" 
     exclude "META-INF/*.DSA" 
     exclude "META-INF/*.RSA" 
    } 
    with jar 
} 

一部分然後,我只是執行命令行上的「gradle這個fatJar」,並得到一個完美的罐子。

相關問題