Questions tagged «dependency-management»

软件项目使用的依赖项管理,例如第三方库。

30
Android Studio:将jar添加为库?
我正在尝试使用新的Android Studio,但似乎无法正常工作。 我正在使用Gson库对JSON对象进行序列化/反序列化。但是该库不包含在构建中。 我仅使用MainActivity创建了一个新项目。在/ libs文件夹中复制gson-2.2.3.jar,并将其添加为库依赖项(右键单击->添加为库)。这包括android studio中的jar,因此可以从源文件中引用它。 当我尝试运行项目时,它无法编译,因此我添加了: compile files('libs/gson-2.2.3.jar') .gradle文件中的依赖项。之后,它可以正确编译,但是在运行应用程序时出现错误消息ClassDefNotFoundException。 有人知道我在做什么错吗?

8
在Gradle中实现和编译有什么区别?
更新到Android 3.0工作室并创建一个新项目后,我注意到,在build.gradle没有增加新的依赖关系,而不是一种新的方式compile出现implementation的,而不是和testCompile存在testImplementation。 例: implementation 'com.android.support:appcompat-v7:25.0.0' testImplementation 'junit:junit:4.12' 代替 compile 'com.android.support:appcompat-v7:25.0.0' testCompile 'junit:junit:4.12' 它们之间有什么区别,我应该使用什么?


12
Maven中dependencyManagement和依赖关系之间的区别
dependencyManagement和之间有什么区别dependencies?我已经在Apache Maven网站上看到了这些文档。似乎dependencyManagement可以在其子模块中使用在之下定义的依赖项,而无需指定版本。 例如: 父项目(Pro-par)在以下项下定义依赖项dependencyManagement: <dependencyManagement> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8</version> </dependency> </dependencies> </dependencyManagement> 然后在Pro-par的子级中,我可以使用junit: <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> </dependencies> 但是,我想知道是否有必要在父pom中定义junit吗?为什么不直接在所需的模块中定义它?

11
在Java / Maven中处理“ Xerces地狱”?
在我的办公室里,仅提及Xerces一词就足以引起开发人员的致命愤怒。粗略地浏览SO上的其他Xerces问题似乎表明,几乎所有Maven用户在某个时候都被该问题“感动”。不幸的是,了解问题需要对Xerces的历史有一点了解... 历史 Xerces是Java生态系统中使用最广泛的XML解析器。几乎所有用Java编写的库或框架都以某种能力使用Xerces(如果不是直接使用,则是透明地使用)。 到目前为止,官方二进制文件中包含的Xerces jar 尚未进行版本控制。例如,Xerces 2.11.0实现jar被命名为xercesImpl.jarnot xercesImpl-2.11.0.jar。 Xerces团队不使用Maven,这意味着他们不将正式发行版上载到Maven Central。 Xerces过去以单个jar(xerces.jar)的形式发布,但被拆分为两个jar,一个包含API(xml-apis.jar),一个包含这些API的实现(xercesImpl.jar)。许多较旧的Maven POM仍声明依赖于xerces.jar。在过去的某个时候,Xerces也发布为xmlParserAPIs.jar,某些较早的POM也依赖于此。 将jar部署到Maven存储库的人分配给xml-apis和xercesImpl jar的版本通常是不同的。例如,即使xml-apis都来自Xerces 2.8.0,也可以给它xml版本1.3.03,给xercesImpl版本2.8.0。这是因为人们经常用实现的规范版本标记xml-apis jar。还有就是这是一个非常不错的,但不完全击穿这里。 使事情复杂化的是,Xerces是JRE中包含的XML处理Java API(JAXP)的参考实现中使用的XML解析器。实现类在com.sun.*名称空间下重新打包,这使得直接访问它们很危险,因为它们在某些JRE中可能不可用。但是,并非所有的Xerces功能都通过java.*和javax.*API 公开;例如,没有API公开Xerces序列化。 令人困惑的是,几乎所有servlet容器(JBoss,Jetty,Glassfish,Tomcat等)都随Xerces一起放在其一个或多个/lib文件夹中。 问题 解决冲突 由于上述某些(或全部)原因,许多组织在其POM中发布和使用Xerces的自定义版本。如果您的应用程序很小并且仅使用Maven Central,那么这并不是真正的问题,但是对于Artifactory或Nexus代理多个存储库(JBoss,Hibernate等)的企业软件而言,这很快就成为一个问题: 例如,组织A可能发布xml-apis为: <groupId>org.apache.xerces</groupId> <artifactId>xml-apis</artifactId> <version>2.9.1</version> 同时,组织B可能发布以下内容jar: <groupId>xml-apis</groupId> <artifactId>xml-apis</artifactId> <version>1.3.04</version> 尽管B的jar版本低于A的版本jar,但Maven不知道它们是相同的工件,因为它们具有不同 groupId的。因此,它不能执行冲突解决,并且两个都 jar将作为已解决的依赖项包括在内: 类加载器地狱 如上所述,JRE在JAXP RI中与Xerces一起提供。将所有Xerces Maven依赖项标记为<exclusion>s或as 会很好<provided>,您所依赖的第三方代码可能会或可能不会与您使用的JDK的JAXP中提供的版本一起使用。另外,您还可以将Xerces jars放在servlet容器中以应对。这给您提供了许多选择:是否删除servlet版本,并希望您的容器在JAXP版本上运行?离开servlet版本更好,希望您的应用程序框架在servlet版本上运行是否更好?如果上面概述的一两个未解决的冲突成功地渗入了您的产品(在大型组织中很容易发生),您很快就会陷入类加载器地狱中,想知道类加载器在运行时选择的是哪个版本的Xerces,是否将在Windows和Linux中选择相同的jar(可能不是)。 解决方案? 我们试过标志认证的所有Xerces的Maven依赖作为<provided>或作为<exclusion>,但这是给难以执行(尤其是大型团队)的文物有这么多的别名(xml-apis,xerces,xercesImpl,xmlParserAPIs,等)。此外,我们的第三方库/框架可能无法在JAXP版本或servlet容器提供的版本上运行。 我们如何最好地使用Maven解决这个问题?我们是否必须对依赖项进行这种细粒度的控制,然后依靠分层的类加载?是否有某种方法可以全局排除所有Xerces依赖关系,并强制我们所有的框架/库使用JAXP版本? 更新:Joshua Spiewak已将Xerces构建脚本的修补程序版本上载到XERCESJ-1454,从而可以上载到Maven Central。投票/观看/贡献这个问题,让我们一劳永逸地解决这个问题。

16
如何将本地.jar文件依赖项添加到build.gradle文件?
所以我试图将我的本地.jar文件依赖项添加到我的build.gradle文件中: apply plugin: 'java' sourceSets { main { java { srcDir 'src/model' } } } dependencies { runtime files('libs/mnist-tools.jar', 'libs/gson-2.2.4.jar') runtime fileTree(dir: 'libs', include: '*.jar') } 您会看到我将.jar文件添加到了这里的referencedLibraries文件夹中:https : //github.com/WalnutiQ/wAlnut/tree/version-2.3.1/referencedLibraries 但是问题是,当我在命令行上运行命令:gradle build时,出现以下错误: error: package com.google.gson does not exist import com.google.gson.Gson; 这是我的整个仓库:https : //github.com/WalnutiQ/wAlnut/tree/version-2.3.1



5
相当于python的Maven
关闭。此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗?更新问题,使其成为话题成为Stack Overflow。 5年前关闭。 改善这个问题 我是Java开发人员/ python初学者,但我缺少maven功能,特别是依赖管理和构建自动化(我是说您没有构建,但是如何创建用于部署的软件包?) 是否有等效的Python实现这些功能? 注意:我使用python 2.x 谢谢。

13
使用Maven强制重新下载发布依赖项
我正在开发一个依赖项为X的项目。而X则依赖于Y。 我曾经在项目的pom中明确包含Y。但是,它并没有被使用,为了使它更整洁,我改为将其作为依赖项添加到X的pom中。X被标记为发布依赖项。 问题是,从项目的pom中删除Y并将其添加到X的pom中之后,我的项目没有继续使用mvn -U clean package。我知道-U更新快照,但不发布。 因此,在不删除〜/ .m2 / repository目录的情况下,如何强制重新下载X的pom?另外,我尝试运行dependency:purge-local-repository,但也没有用。

6
如何在Eclipse中添加Maven依赖项?
我根本不知道如何使用Maven。我已经在Eclipse上开发了两年了,现在还不需要了解它。但是,现在我正在查看一些建议执行以下操作的文档: “要将其包含在您的项目中,只需将此Maven依赖项添加到您的构建中即可。” <repository> <id>jboss</id> <url>http://repository.jboss.org/maven2</url> </repository> ... <dependency> <groupId>org.jboss.resteasy</groupId> <artifactId>resteasy-jackson-provider</artifactId> <version>1.1.GA</version> </dependency> 如何在Eclipse项目中执行此操作? 请假设我对Maven一无所知。我只是想知道可以通过mvn在命令行上输入将其安装在我的计算机上,但这是我所了解的范围。如果有等效的,非Maven的方式通过Eclipse遵循这些说明,我将很高兴继续对Maven一无所知。




5
作曲者:如何找到软件包的确切版本?
假设我正在编写一个库A,该库依​​赖于另一个库,例如monolog。 我想安装最新版本的monolog,因此将其放在composer.json中: { "require": { "monolog/monolog": "*.*.*" } } 然后我跑$ php composer.phar install。 我期待在composer.lock内找到安装的版本,但是不存在: { "hash": "d7bcc4fe544b4ef7561918a8fc6ce009", "packages": [ { "package": "monolog/monolog", "version": "dev-master", "source-reference": "2eb0c0978d290a1c45346a1955188929cb4e5db7" } ], "packages-dev": null, "aliases": [ ], "minimum-stability": "dev", "stability-flags": [ ] } 我需要版本,因为我想将我的库绑定到一组特定的版本,例如:如果我发现版本是1.3.5,请在我的composer.json文件中输入以下内容: "require": { "monolog/monolog": "1.3.*" } 有任何想法吗?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.