问题标签 [gradle-shadow-plugin]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
279 浏览

android - 在我的项目中添加阴影生成的 jar 时出现重复条目​​异常

我正在使用 Gradle 的影子插件为 Dagger 2 生成修改后的 jar。jar 文件按预期生成,但是当我将 jar 作为依赖项添加到我的项目时,我得到了

给玩具我的案例的背景:我有一个具有下一个结构的应用程序

核心库

|

库1

|

应用程序

CoreLib 和 Lib1 使用 shadow 生成的这些 jar 文件来替换 dagger2。但是在运行应用程序时,我在 Lib1 中遇到了之前的异常。

我在两个库中都添加了这样的罐子

有任何想法吗??

0 投票
0 回答
197 浏览

gradle - 为什么要依赖shadow jar?

我一直在阅读 gradle shadow 插件文档,发现它允许一个项目依赖于另一个项目的 shadowed jar

我现在很好奇这个功能的用例是什么?

0 投票
1 回答
820 浏览

android-studio - 是否可以隐藏位于 aar 的“libs”文件夹中的依赖项?

为了给你我想要完成的内容,我将首先描述我的项目结构:

创建的模块 1 和 2 包含由 shadow gradle 插件创建的 2 个 jar 文件,以重新定位 dagger 2 依赖项。这样做是因为应用程序使用 Dagger 1,并且它们不能在常规基础中同时使用。

核心库模块包含不同库的核心功能,这就是为什么它是一个单独的库,它还使用 dagger 2 进行依赖注入。

库模块包含我们为客户的应用程序提供的功能,它还使用 dagger 2 进行依赖注入。

现在真正的问题是应用程序,因为它使用 Dagger 1 进行依赖注入。因此,使用阴影 jar 可以在同一个项目中使用 dagger 1 和 2,因为 shadow 重命名并重新定位了 dagger 2 使用的所有类,例如 @Inject 到 @Inject2。

在库中,一切都按预期工作,因为我使用重定位和重命名的类,如 @Module2、@Inject2 等。

但是在我使用 dagger 1 的应用程序中,标签是 @Inject,@Module,通常在 dagger 1 中使用。因为在我的 build.gradle 中导入的依赖项是 Dagger1。但是当我构建应用程序时,我得到错误指示,我还必须添加修改后的 Dagger 2 标签,如@Module2、@Inject2。这正是我不想要的。

有没有办法使用 gradle 隐藏或忽略这些依赖项,这样应用程序就看不到 dagger 2 的修改后的 jar,但它们仍然可以在库中使用?

到目前为止,我唯一的解决方案是从库中删除 Dagger 2 并自己实现依赖注入,但这很耗时,而且不是我想要的

编辑:

完全错误:

编辑2:

0 投票
0 回答
1765 浏览

gradle - 如何使用 Gradle 阴影插件遮蔽单个依赖项?

我正在编写一个使用几个依赖项的小型库。其中之一是org.json图书馆。

我只想org.json通过将源包含在我自己的 jar 中并将它们重新定位到另一个repackaged包来隐藏这个库。

我查看了 Gradle Shadow 插件,但它创建了一个-alljar。我只想要普通的 jar,只org.json需要重新定位 lib。这可能吗?

替代方法是将这些类复制到我的项目中并在源代码管理中检查它们。

0 投票
1 回答
3345 浏览

gradle - installDist 上的 Gradle 复制文件夹

使用 gradle 3.4 但对它来说相当新。

如果我运行 gradlew installDist , src/main/java 中的文件会被复制到构建文件夹中,一切正常。

但是我在 src/main/conf 中还有一个额外的文件夹,我想复制到 build/install/my-artifact/conf

我不想把它放在 src/main/resources 中,因为它会包含在 jar 中。我想把它放在外部。

除了依赖项之外,我的 gradle 文件没有任何特别之处。

那么当 installDist 运行时,我将如何去复制文件夹/文件呢?

编辑:

也必须使用影子插件。

0 投票
2 回答
7952 浏览

gradle - 带有 gradle 的影子插件的清单问题

我正在使用 gradle v3.4 和影子插件 v1.2.4。我正在使用 build.gradle 文件中的以下内容将 jar 文件发布到本地 maven 存储库

发布后,我尝试在另一个项目中使用此依赖项,如下所示,但是当我运行gradle build时得到下面复制的错误

错误

0 投票
0 回答
215 浏览

gradle - 使用 Gradle 进行依赖分布

我正在编写一个 Minecraft mod,不,我不需要 Java 方面的帮助。我已经完成了所有工作:)。但是,我在依赖项方面遇到了一些麻烦。你看,我的模组需要 JGit。我试图在 build.gradle 中使用“shade”来包含 JGit,但这只适用于开发环境。当我尝试分发构建的 jar 时,我发现它无法正常工作。

有人建议我使用“shadow”插件——但是,当我尝试这样做时,构建 mod 将无法正常工作(所有导入都无法找到 JGit)。不知道这是我的错,shadow的错,还是ForgeGradle的错。我希望这是我的错,因为这是可以解决的!

这篇文章包含了我在 build.gradle 中尝试过的一些东西。它没有用。

写这篇文章时我尝试的最后一个 build.gradle 在这里

0 投票
0 回答
208 浏览

android-studio - Android Studio 没有看到依赖(但 Gradle 有!)

我已经构建了一个纯 java 库,并编译了两个版本,一个是隐藏的(使用 gradle shadow 插件),一个不是,并将它们部署到我的本地 nexus 存储库。

在我的 Android 库项目中,我创建了两个 productFlavor,standard 和 shadowed,它们引用了我的 nexus 存储库中的相应工件。在 Android Studio 中,只有带有非阴影 jar 的标准产品风味会显示外部库中的库。

切换到任何隐藏的构建变体会导致在 Android Studio 中完全丢失依赖项,并且引用它们中的任何一个的所有代码似乎在 AS 中都被破坏了。(在切换构建变体以更改依赖项时必须同步 gradle)。

添加到阴影编译配置中的其他依赖项(例如 firebase)会显示出来并且工作正常。所以这只是一个依赖。gradle 控制台或事件日志中没有打印任何异常。

但是,命令行中的 gradle 则完全不同。运行 ./gradlew library:dependencies 会适当地显示库及其依赖项,我可以从命令行为所有变体编译和构建我的 AAR,而不会出现问题当 android 库是我较大项目的子项目时,它起作用了,但是由于我在 Android Studio 中将它分解为一个单独的项目,所以它看起来根本不起作用

build.gradle 看起来像这样(不包括正常的东西):

FWIW,这是使用:

我真正能够确定两者之间的唯一不同(除了重新定位的包和 pom 中的不同依赖项集)是阴影 jar 的 META-INF 文件夹的内容 - 我想知道这是否可能令人困惑的AS?特别是,影子插件在 MANIFEST.MF 中添加了一个 Class-Path 条目,列出了从 fat jar 中排除的运行时依赖 jar 文件,以及一个 META-INF/maven/ 文件夹,其中包含每个条目的 .pom那些也是。

0 投票
0 回答
149 浏览

osgi - gradle shadow 插件如何处理 OSGi 结构?

我在 gradle 构建过程中使用影子插件为我的可执行文件打包一个 uber jar。但是,这涉及到datanucleus哪个是 OSGi 结构化的。当我shadowJar在 gradle 中使用任务时,plugin.xml丢失了。gradle shadow 插件是否有办法处理这种类型的依赖关系?我一直在四处寻找,但除了手动合并事物或远离影子插件之外,没有发现任何有用的东西。

0 投票
0 回答
43 浏览

gradle - 控制对着色类的三级 jar 访问

我有一个项目,它有两个依赖项,它们都对不同版本的番石榴具有三级依赖项;14.0.1 和 18

14.0.1 按提供的方式提供,我在我的 uber jar 中捆绑了版本 18 并将其隐藏以将有问题的包重新定位com.google.common.collectshaded.com.google.common.collect,并通过以下方式验证了这一点jar -tf

这就是我对着色 jar 的理解变得模糊的地方 - 我的两个需要 Guava 的依赖 jar 应该如何知道在标准和着色的包之外使用哪个包?

我正在使用 gradle 通过com.github.jengelman.gradle.plugins:shadow:1.2.3插件构建我的项目。