2015-06-11 233 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”,并得到一个完美的罐子。

相关问题