我基本上想做一些简单的事情——或者至少我认为它应该非常简单。
我的目标是创建一个 Intellij gradle 项目,使用 gradle 向模块添加一些依赖项,并向其中添加一些 java 源代码。
然后我只想有一个选项以某种方式将整个东西编译成 1 个 jar,包含所有等级依赖项并能够使用“java -jar”执行
然而事实证明,这并不像我想象的那么容易。
我刚刚从 intellij 创建了一个新的 gradle 项目并添加了一个 Main 类。
我会给你一个关于我的文件的概览:
设置.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 clean build”。
这创建了一个 jar,但没有库。 但我没想到会这么简单。
2。我尝试按照此处的建议构建模块的工件:
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 将依赖项添加到类路径(或在 list 文件中声明)
3。我还尝试使用 gradle 应用程序插件。
然而,这会创建一个 zip/tar,其中包含一个执行脚本和一个 bin 文件夹,这不是我的本意。
所以我开始谷歌搜索了好几个小时,但找不到解决问题的办法。
拜托,这并没有那么难 - 它就是这么基础。
我相信一些天才可以帮助我,并指出我的——可能是愚蠢的——失败。
最佳答案
我目前的解决方案如下:
我使用 gradle 构建一个包含所有库的 jar,我使用名为 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”就可以得到一个完美的jar。
关于java - intellij 构建包含 gradle 依赖项的 jar 工件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30791016/