标签: transitive-dependency

使用Apache Maven Shade Plugin排除所有传递依赖项

我使用了Apache Maven Shade Plugin来创建胖jar(包含所有依赖项的所有类的jar).我当前的项目文件夹结构看起来像这样,

> Parent Module (packaging pom)

    > Module 1 (packaging jar)
        > Own classes
        > Dependency-1
        > Dependency-2

    > Module 2 (packaging jar)
        > Own classes
        > Module 1 (I want here only classes written in module-1, not any transitive dependencies)
        > Dependency-1
        > Dependency-2
        > Dependency-3
Run Code Online (Sandbox Code Playgroud)

pom.xml来自父模块的快照,

<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <executions>
            <execution>
                <id>common-shade</id>
                <goals>
                    <goal>shade</goal>
                </goals>
                <configuration>
                    <transformers>
                        <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                            <resource>META-INF/spring.handlers</resource>
                        </transformer>
                        <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                            <resource>META-INF/spring.schemas</resource>
                        </transformer>
                    </transformers>
                </configuration>
            </execution>
        </executions>
    </plugin>
Run Code Online (Sandbox Code Playgroud)

pom.xml …

dependency-management maven-plugin maven transitive-dependency maven-shade-plugin

7
推荐指数
0
解决办法
726
查看次数

gradle 中的实现依赖关系在 Maven 中相当于什么?

我最近了解到gradle 有api/ implementation“范围” 的依赖关系,我试图弄清楚是否有一个implementation与 gradle 中的 Maven 等效的东西。没有一个 Maven 依赖范围看起来完全适合这个 -provided使它不是运行时依赖,compile/runtime似乎没有做正确的事情,......所以似乎没有直接的等价物。

基本上,我有一个在编译时(对于我的库)/运行时(对于使用我的库的代码)所需的库的依赖项,但我不想在依赖于我的代码的编译类路径中图书馆。这可以用maven来做吗?

gradle maven transitive-dependency

7
推荐指数
1
解决办法
3102
查看次数

具有本机依赖性和复制文件的Maven项目

我有以下场景:

mylib是一个库(我有源​​代码,所以我想把它们放到maven项目mylib:mylib中).这个库有一个jar依赖项,我只有jar,而且它不能在Maven存储库中找到(我也不想在那里安装它).为了使它编译,这样的东西可以工作:将jar文件添加到"lib"文件夹中的mylib项目,例如"lib/thirdpartylib.jar"和mylib的pom.xml中,添加一个自选组的依赖项/工件/版本和" <scope>system</scope><systemPath>${project.basedir}/lib/thirdpartylib.jar</systemPath>"条目.mylib项目将编译正常.

请注意,mylib还具有对dll文件的运行时依赖性,例如thirdparty.dll.但是对于编译来说这并不重要.

但是,现在我想知道如何实现以下目标:

任何其他项目,例如项目"X",使用 mylib,将需要

- mylib.jar
- thirdpartylib.jar
- thirdpartylib.dll
Run Code Online (Sandbox Code Playgroud)

,

并且它必须将java.library.path设置为目录(例如"."),以便执行VM找到第三方jar和dll.

我关心的是:我希望第三方jar/dll是mylib项目的责任.即我想定义知识,你需要将第三方jar和dll复制到目标文件夹,java.library.path引用它们,成为mylib项目的一部分(mylib pom知道事情是怎样的用于其他项目).然而,我希望这些知识(即复制指令,无论它们是如何在Maven中完成)以传递方式移交给使用mylib的任何其他项目,例如X. 这有可能吗?

[我现在的黑客解决方案是我在X中有第三方的副本,但即便如此我也不知道如何复制/处理dll文件,所以我必须写一个自述文件说dll文件有被复制到执行VM的bin文件夹中).

任何建议表示赞赏!

dll dependencies copy maven transitive-dependency

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

c ++中的"传递"动态链接

假设我有一个动态库a.so.

然后,我建立b.so针对a.so只有当a.so存在于机器上.

然后,我建立可执行的c反对b.so.

我希望能忘掉一切a.soc Makefile,但现在看来,我需要补充a-L标志或者我不确定引用a.so时符号c链接.

这是正常的动态链接还是我忘记了什么?

c++ dynamic shared-libraries dynamic-linking transitive-dependency

6
推荐指数
0
解决办法
845
查看次数

Android Studio Gradle不使用传递依赖项

在一个单独的项目中遇到此问题后,我进行了一个测试项目以验证该问题。

  1. 打开Android Studio 3.0,我创建了一个新的基本项目。其主要模块称为app
  2. 我添加了一个名为的库模块libraryone
  3. 在中libraryone,我向Gson添加了一个依赖项,并使用Gson使用单个静态方法添加了一个类。
  4. 在中app,我向添加了一个依赖项libraryone。我和一起进行了简单的测试transitive = true,因为互联网似乎模糊地同意这样做可能会有所帮助。(它没有。)
  5. app,在MainActivity,我使用的班级libraryone。这行得通(只要我没有transitive = false设置)。
  6. 但是,我无法从MainActivity自身引用Gson 。无论是从Android Studio还是从命令行Gradle中,它都会给出“无法解析符号'Gson'”错误。这是不寻常的,而且令人不快,因为这意味着您必须在整个项目组中重复通用的依赖关系,并且这些类仍会包含在输出中。当然是我做错了什么,还是这是个错误?

我的代码如下:

MainActivity.java(在中app

package com.erhannis.test.dependencytest;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import com.erhannis.test.libraryone.LibClass;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        String s = LibClass.convert(new Object());
        System.out.println("out: " + s);

        new com.google.gson.Gson(); // This line gives a compile-time …
Run Code Online (Sandbox Code Playgroud)

dependencies android transitive-dependency android-gradle-plugin

6
推荐指数
2
解决办法
2905
查看次数

gradle 强制版本的传递依赖不起作用。似乎不适用排除、覆盖或强制

我与传递依赖有冲突。推翻、排除或强迫都无济于事。我还能做什么才能将正确版本的库放入 jar 中?完整的代码是。找到了https://github.com/geoHeil/gradle-dependency-resolution,但其主要部分如下所述。

问题描述

执行

./gradlew shadowJar
Run Code Online (Sandbox Code Playgroud)

禁用 geomesa 依赖项(引入过时版本的 typesafe/lightbend 配置库):

dependencies {

    compile "com.github.kxbmap:configs_2.11:0.4.4"
    //compile "org.locationtech.geomesa:geomesa-hbase-spark-runtime_2.11:2.0.1"
}
Run Code Online (Sandbox Code Playgroud)

并执行 jar

java -jar build/libs/gradleThing-all.jar                         
Run Code Online (Sandbox Code Playgroud)

输出

hello
my config is: Success(Job1Configuration(frequencyCounting))
Run Code Online (Sandbox Code Playgroud)

启用依赖项时:

./gradlew shadowJar
java -jar build/libs/gradleThing-all.jar                         
Run Code Online (Sandbox Code Playgroud)

它失败了

hello
Exception in thread "main" java.lang.Exception: Failed to start. There is a problem with the configuration: Vector([extract] com.typesafe.config.Config.hasPathOrNull(Ljava/lang/String;)Z)
Run Code Online (Sandbox Code Playgroud)

这与配置库的过时版本有关,如何解决类型安全配置上的NoSuchMethodError?。还通过以下方式确认:

gradle dependencyInsight --dependency om.typesafe:config

> Task :dependencyInsight
com.typesafe:config:1.3.1 (conflict resolution)
   variant "runtime" [
      Requested attributes not found in the selected …
Run Code Online (Sandbox Code Playgroud)

gradle transitive-dependency dependency-resolution

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

这个“all*.exclude”在 Gradle 传递依赖中意味着什么?

我想知道 Gradle 传递依赖中的“all*.exclude”是什么意思?

configurations {
        compile.exclude group: 'org.hamcrest', module: 'hamcrest-core'
        all*.exclude group: 'org.mockito', module: 'mockito-all'
    }
Run Code Online (Sandbox Code Playgroud)

上面代码中的“all*.exclude”是 Gradle 或其他语法中的。

gradle transitive-dependency

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

更新传递依赖

我运行npm audit并收到一条消息assign-deep有漏洞,但已在 1.0.1 中修复

\n\n

不幸的是,这是一个传递依赖。有没有办法更新此传递依赖项,使其使用 v1.0.1 ?

\n\n
  \xe2\x94\x94\xe2\x94\x80\xe2\x94\xac update@0.7.4\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\xac assemble-core@0.25.0\n      \xe2\x94\x94\xe2\x94\x80\xe2\x94\xac templates@0.24.3\n        \xe2\x94\x94\xe2\x94\x80\xe2\x94\xac engine-base@0.1.3\n          \xe2\x94\x94\xe2\x94\x80\xe2\x94\xac engine@0.1.12\n            \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 assign-deep@0.4.8 \n
Run Code Online (Sandbox Code Playgroud)\n

npm transitive-dependency npm-audit

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

如何为Maven项目指定测试jar的传递依赖关系?

我试图确保我从maven发布的测试jar具有正确的传递依赖关系。

例如,test-jar不会依赖非test-jar生成。

类似地,例如AAA发布了一个测试罐,而BBB包含了AAA的测试罐的测试作用域依赖性。在CCC的测试中,当我使用BBB的test-jar中的类,而使用AAA的test-jar中的类时,我在AAA的test-jar中的类上收到“找不到类”错误-即,BBB的测试的传递依赖项aren根本没有正确记录。

有什么办法可以依靠BBB的测试罐正确地引入传递依赖关系吗?

我在https://github.com/nkronenfeld/transitive-test-dependencies中有所有这些的示例代码

对于BBB的常规jar和AAA的test jar,在CCC / pom.xml中有两个已注释掉的依赖项,似乎都不需要它们。但是,CCC的测试目标不会没有任何一个。

unit-testing dependency-management maven transitive-dependency

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

如何导出android库中的依赖项

从版本 3.0.0 开始,Android Gradle 插件允许您将模块的依赖项导出到其他模块。

因此,在我的 android 库模块中,我应该能够使用该依赖项来声明api <dependency declaration>依赖项,并将该依赖项作为导出的传递依赖项访问,在我的主应用程序项目中,我已将我的库模块声明为依赖项。

我还使用静态文件依赖项。

举个例子:

我有一个类NeededEverywhere,它是在它自己的 gradle 模块中定义的everywhere-module。该模块与我的库模块位于同一项目中。

//library module's build.gradle:
dependencies {
    api project(':everywhere-module')
}
Run Code Online (Sandbox Code Playgroud)

在我的应用程序的 build.gradle(位于不同的 Android Studio 项目中)中,我声明了对库的依赖,但不是everywhere-module. 这应该意味着这everywhere-module是一个导出的传递依赖。

//app project's build.gradle
dependencies {
    implementation files("path/to/my/library/file.aar")
}
Run Code Online (Sandbox Code Playgroud)

但是,我无法访问NeededEverywhere我的应用程序中的课程。

我究竟做错了什么?

android gradle transitive-dependency android-studio gradle-dependencies

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