我基本上想做一些简单的事情 - 或者至少我认为这应该相当简单。
我的目标是创建一个Intellij gradle项目,使用gradle向模块添加一些依赖项,并添加一些java源代码。
然后,我只想有一个选项以某种方式将整个项目编译为一个包含所有gradle依赖项并能够使用“java -jar”执行的1个jar文件。
然而,结果证明这并不像我想象的那么容易。
我刚从Intellij创建了一个新的gradle项目并添加了一个Main类。
下面是我的文件概述:
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();
}
}
当从Intellij通过调试运行时,“MyStart”类的主方法会被执行。只有在所有依赖项正确加载时,它才能正常工作。
注意:我使用的是Intellij Community Edition,如果这有任何区别。
我尝试了以下方法:
1. 我尝试仅使用“gradlew clean build”命令构建。
这创建了一个jar文件,但没有包含依赖库。但我没想到会这么简单。
2. 我尝试按照这里建议的方式构建模块的artifact:
http://blog.jetbrains.com/idea/2010/08/quickly-create-jar-artifact/
我尝试过提取和不提取依赖项。在两种情况下,依赖项都被添加到了jar包中,但它们被添加到了jar包的根目录下。当我尝试通过“java -jar”来运行jar文件时,它报错了:
"Exception in thread "main" java.lang.NoClassDefFoundError: org/openqa/selenium/WebDriver
..."
好的,它无法加载依赖项。
注意:我认为依赖项没有添加到类路径中,但我不确定。然而,我期望Intellij将依赖项添加到类路径中(或在清单文件中声明)。
3. 我还尝试使用Gradle应用程序插件。
但是,这会创建一个包含执行脚本和bin文件夹的zip/tar,这不是我的意图。
所以我开始搜索了几个小时,但我找不到解决我的问题的方法。
来吧,这不可能那么难 - 它只是如此基础。
我相信一些天才可以帮助我指出我 - 可能很愚蠢的 - 失败。