Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 包含渐变依赖项的intellij构建jar工件_Java_Intellij Idea_Jar_Gradle_Build - Fatal编程技术网

Java 包含渐变依赖项的intellij构建jar工件

Java 包含渐变依赖项的intellij构建jar工件,java,intellij-idea,jar,gradle,build,Java,Intellij Idea,Jar,Gradle,Build,我基本上想做一些简单的事情——或者至少我认为应该很简单 我的目标是创建一个Intellij gradle项目,使用gradle向模块添加一些依赖项,并向其添加一些java源代码 然后我只想有一个选项,以某种方式将整个东西编译成1个jar,包含所有的等级依赖项,并且能够使用“java-jar”执行 然而事实证明,这并不像我想象的那么容易 我刚刚从intellij创建了一个新的gradle项目,并添加了一个主类 我将向您概述我的文件: settings.gradle: rootProject.nam

我基本上想做一些简单的事情——或者至少我认为应该很简单

我的目标是创建一个Intellij gradle项目,使用gradle向模块添加一些依赖项,并向其添加一些java源代码

然后我只想有一个选项,以某种方式将整个东西编译成1个jar,包含所有的等级依赖项,并且能够使用“java-jar”执行

然而事实证明,这并不像我想象的那么容易

我刚刚从intellij创建了一个新的gradle项目,并添加了一个主类

我将向您概述我的文件:

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社区版

我尝试的是:

1.我试着只使用“gradlew clean build”。
这创建了一个jar,但没有libs。 但我没想到会这么容易

2.我尝试构建模块的工件,如下所示:

我尝试了提取依赖项和未提取依赖项。 在这两种情况下,依赖项都被添加到jar中,但它们被添加到jar的根目录中。 当我试图通过“java-jar”运行jar文件时,它抱怨:

"Exception in thread "main" java.lang.NoClassDefFoundError: org/openqa/selenium/WebDriver
..."
好的,所以它无法加载依赖项。
注意:我认为依赖项没有添加到类路径中,但我不确定这一点。但是,我希望Intellij向类路径添加依赖项(或在清单文件中声明)

3.我还尝试使用gradle应用程序插件。 但是,这会创建一个zip/tar,其中包含一个执行脚本和一个bin文件夹,这不是我的意图

所以我开始在谷歌上搜索数小时,但我找不到解决问题的方法

来吧,这不可能这么难-它只是这么基本


我相信一些天才可以帮我解决问题,并指出我可能愚蠢的失败。

我目前的解决方案如下:

我使用gradle构建一个包含所有lib的jar,我使用一个名为fatJar的定制任务来实现这一点

这是我身材的一部分

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。

工作就像一个符咒,注意,我不得不在libs dir中稍加修改才能找到jar