标签: gradle-shadow-plugin

Shadow Plugin Gradle:mergeServiceFiles()有什么作用?

在我的build.gradle文件中,我需要添加以下行:

shadowJar {
    mergeServiceFiles()
}
Run Code Online (Sandbox Code Playgroud)

否则罐子不能正常运行.我想知道这条线到底是做什么的?我在Eclipse Luna中使用Gradle插件.我在一个Java项目上创建了jar,它取决于另一个Java项目.

java gradle build.gradle gradle-shadow-plugin

14
推荐指数
2
解决办法
4092
查看次数

如何让gradle的构建任务生成"常规"jar的影子jar _instead?

(这是使用gradle 2.4)

对于我的一个项目,分成几个子模块,我使用的shadow插件非常适合我的需要; 它有一个main,并且根据插件的自述文件的推荐,我使用应用程序插件与它一起使用,以便在清单中生成Main-Class,一切正常.

现在,这是一个SonarQube插件项目,我也使用(成功!)gradle声纳packagin插件.这个插件的作用是,当你./gradlew build生成声纳插件而不是"常规"jar时.

我希望在这里为我的子项目做同样的事情,除了我希望它只生成影子jar插件而不是"常规"插件...现在我使用这个简单的文件生成两个:

buildscript {
    repositories {
        jcenter();
    }
    dependencies {
        classpath(group: "com.github.jengelman.gradle.plugins",
            name:"shadow", version:"1.2.1");
    }
}

apply(plugin: "application");
apply(plugin: "com.github.johnrengelman.shadow");

dependencies {
    // whatever
}

mainClassName = //whatever

artifacts {
    shadowJar;
}

// Here is the hack...

build.dependsOn(shadowJar);
Run Code Online (Sandbox Code Playgroud)

如何修改此文件以便仅生成阴影jar而不是常规jar?

java gradle gradle-shadow-plugin

10
推荐指数
1
解决办法
1万
查看次数

Gradle 和 Shadow 插件 - 在 shadowJar 任务之后将附加文件(.jar 文件)复制到最终 jar

问题描述
我正在使用 Gradle Shade 插件,一切正常,并将资源文件复制到最终的 jar。但是,正如文档所说,它不能包含其他.jar文件作为资源,因为它无法将它们与依赖项区分开来。它不是解压它们。

我想要做什么
我想将.jar文件tools夹(build.gradle位于my 旁边)中的额外文件复制到任务最终jar生成的文件中shadowJar

问题
如何扩展任务 ( shadowJar) 以将其他文件复制到生成的 jar 文件中。

gradle gradle-shadow-plugin gradle-plugin gradle-task

6
推荐指数
1
解决办法
384
查看次数

是什么原因导致“找不到netty-transport-native-epoll-4.1.76.Final-linux-x86_64.jar”的问题?

我正在使用 Gradle Shadow jar 插件为 selenium 生成一个 fat jar。Gradle kts 中声明了以下代码:

dependencies {

    val seleniumV = "4.1.4"
    val phantomJSV = "1.5.0"
    val htmlUnitV = "3.61.0"

    // Selenium
    api("org.seleniumhq.selenium:selenium-api:${seleniumV}")
    api("org.seleniumhq.selenium:selenium-support:${seleniumV}")
}

tasks {
    shadowJar {
        exclude("META-INF/*.SF")
        exclude("META-INF/*.DSA")
        exclude("META-INF/*.RSA")
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的电脑上编译成功,但是在云端编译时遇到以下错误:


FAILURE: Build failed with an exception.
02:23
* What went wrong:
02:23
Could not determine the dependencies of task ':repack:selenium-repack:shadowJar'.
02:23
> Could not resolve all files for configuration ':repack:selenium-repack:runtimeClasspath'.
02:23
   > Could not find netty-transport-native-epoll-4.1.76.Final-linux-x86_64.jar (io.netty:netty-transport-native-epoll:4.1.76.Final).
02:23
     Searched in …
Run Code Online (Sandbox Code Playgroud)

gradle netty maven-shade-plugin gradle-shadow-plugin

6
推荐指数
1
解决办法
5829
查看次数

使用 Gradle Shadow 插件时如何仅包含项目和重定位的类?

我有以下几点:

shadowJar {
    relocate 'com.google.common', 'com.example.com.google.common'
}
Run Code Online (Sandbox Code Playgroud)

它会生成包含所有模块依赖项的“-all.jar”文件。

shadowJar {
    relocate 'com.google.common', 'com.example.com.google.common'

    dependencies {
        include('com.example.com.google.common')
    }
}
Run Code Online (Sandbox Code Playgroud)

和:

shadowJar {
    relocate 'com.google.common', 'com.example.com.google.common'

    dependencies {
        include(dependency('com.google.guava:guava:14+'))
    }
}
Run Code Online (Sandbox Code Playgroud)

两者都产生绝对没有类的“-all.jar”文件。

如何创建仅包含项目类和重定位类的“-all.jar”文件?

gradle gradle-shadow-plugin

5
推荐指数
1
解决办法
2207
查看次数

Gradle:shadowJar 排除了依赖项

当尝试创建一个 fat jar 时,shadowJar 遗漏了很多依赖项。我从工作 pom.xml 创建了一个 build.gradle 文件。Maven 构建一个 fat jar 没有问题。阅读 Gradle 关于构建 fat jar 的信息,shadowJar 插件似乎是推荐的方法。然而,我的 Gradle fat jar 给出了以下运行时错误:

Jul 19, 2018 2:35:10 PM restclients.RestStatus2Streams writeToStream
SEVERE: Error occurred while instantiating com.me.streams.impl.producer.MarlinProducerV10.
==> java.lang.NoClassDefFoundError: org/apache/hadoop/fs/PathId.
Run Code Online (Sandbox Code Playgroud)

显然,我远处的罐子缺少了一些东西。果然,org/apache/hadoop/fs/PathId 和整个依赖目录都丢失了。尽管 pom.xml 没有显式包含“org.apache.hadoop:hadoop-common”依赖项,但我显式将该工件作为依赖项添加到我的 build.gradle 文件中,但仍然不高兴。

回答几个问题:

  • 存储库中是否有 hadoop-common 工件?是的。
  • 存储库中是否有工件的命名版本?是的
  • PathId 类是存储库中的工件吗?该工件的“jar xf”表示“是”。

由于 Maven fat jar 工作完美,并且解压 Maven fat jar 会显示 PathId 类(以及 Gradle fat jar 中缺少的其他类),那么我的 build.gradle 文件和/或 ShadowJar 插件和/或 Gradle 就会出现问题。

构建.gradle文件:

apply plugin: 'java'
apply …
Run Code Online (Sandbox Code Playgroud)

gradle gradle-shadow-plugin shadowjar

5
推荐指数
0
解决办法
1371
查看次数

Gradle ShadowJar 与其他 SourceSet 资源

我正在使用 ShadowJar Gradle 插件构建一个 Jar,其中包含目录中的所有源文件 src/main/java和目录中的其他 Jar 文件lib,并且工作正常。我需要的是另一个 ShadowJar 任务,该devShadowJar任务不会在src/main/resources文件夹中提取 JSON 文件,而是在文件夹中提取 JSON 文件src/dev/resources

我将其添加到build.gradle文件中以定义dev源集:

sourceSets {
    dev
}
Run Code Online (Sandbox Code Playgroud)

但现在我不确定如何创建一个devShadowJar任务来使用devJSON 资源而不是位于src/main/resources.

gradle gradle-shadow-plugin

4
推荐指数
1
解决办法
5195
查看次数

Gradle、shadowJar:在任务内使用重定位

我有以下任务:

task myJar(type: Jar) {
    archiveName = 'myJar.jar'
    includeEmptyDirs = false
    destinationDir = rootProject.libsDir
    dependsOn compileJava

    manifest.attributes('Class-Path': '../lib/commons-lang-2.5.jar')

    into '/', {
        from compileJava.destinationDir
        include 'com/myCompany/project/util/order/**',
                'com/myCompany/project/event/**',
    }
}
Run Code Online (Sandbox Code Playgroud)

我想将所有类从 com/myCompany/project/event/** 重新定位到 com/myCompany/re located/project/event/** (以便某些应用程序使用我的 jar 并具有 com.myCompany.project.event 包定义将避免任何可能的冲突)

我发现可以使用影子插件来完成,我尝试添加

relocate 'com.myCompany.project.event.', 'com.myCompany.relocated.project.event.'
Run Code Online (Sandbox Code Playgroud)

在这个任务下,但它似乎不起作用。有谁知道我应该在哪里添加这一行?

gradle gradle-shadow-plugin

3
推荐指数
1
解决办法
8163
查看次数