标签: dependency-management

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')
Run Code Online (Sandbox Code Playgroud)

到de .gradle文件中的依赖项.之后它正确编译,但在运行应用程序时,我得到了一个ClassDefNotFoundException.

有谁知道我做错了什么?

android dependency-management gradle gson android-gradle-plugin

1006
推荐指数
21
解决办法
72万
查看次数

Gradle中的实现和编译之间有什么区别?

在更新到Android Studio 3.0并创建一个新项目后,我注意到build.gradle有一种新方法可以添加新的依赖项,而不是compile存在implementation而不是testCompile存在testImplementation.

例:

 implementation 'com.android.support:appcompat-v7:25.0.0'
 testImplementation 'junit:junit:4.12'
Run Code Online (Sandbox Code Playgroud)

代替

 compile 'com.android.support:appcompat-v7:25.0.0'
 testCompile 'junit:junit:4.12'
Run Code Online (Sandbox Code Playgroud)

它们之间有什么区别,我应该使用什么?

dependency-management gradle transitive-dependency build.gradle gradle-plugin

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

什么是Maven Snapshot,为什么我们需要它?

我对Maven Snapshot的含义以及为什么要构建一个它有点困惑?

java dependency-management maven

799
推荐指数
9
解决办法
30万
查看次数

在Java/Maven中处理"Xerces hell"?

在我的办公室里,仅仅提到Xerces这个词就足以煽动开发者的凶悍愤怒.粗略地看一眼其他Xerces关于SO的问题似乎表明,几乎所有Maven用户都会在某个时候"触及"这个问题.不幸的是,理解这个问题需要对Xerces的历史有一点了解......

历史

  • Xerces是Java生态系统中使用最广泛的XML解析器.几乎每个用Java编写的库或框架都以某种身份使用Xerces(传递,如果不是直接的话).

  • 包含在官方二进制文件中的Xerces罐子直到今天还没有版本化.例如,Xerces 2.11.0实现jar是命名的xercesImpl.jar而不是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也依赖于它.

  • 分配给xml-apis和xercesImpl的版本由那些将其jar部署到Maven存储库的人通常是不同的.例如,xml-apis可能是1.3.03版本,而xercesImpl可能是2.8.0版本,即使两者都来自Xerces 2.8.0.这是因为人们经常使用它实现的规范版本来标记xml-apis jar.还有就是这是一个非常不错的,但不完全击穿这里.

  • 更复杂的是,Xerces是包含在JRE中的Java API for XML Processing(JAXP)的参考实现中使用的XML解析器.实现类在com.sun.*命名空间下重新打包,这使得直接访问它们很危险,因为它们可能在某些JRE中不可用.但是,并非所有Xerces功能都通过API java.*javax.*API 公开; 例如,没有API公开Xerces序列化.

  • 几乎所有的servlet容器(JBoss,Jetty,Glassfish,Tomcat等)都会在一个或多个/lib文件夹中附带Xerces .

问题

解决冲突

对于上述某些原因(或许是全部原因),许多组织在其POM中发布和使用Xerces的自定义构建.如果你有一个小应用程序并且只使用Maven Central,这不是一个真正的问题,但它很快成为企业软件的问题,其中Artifactory或Nexus代理多个存储库(JBoss,Hibernate等):

由Artifactory代理的xml-apis

例如,组织A可能发布xml-apis为:

<groupId>org.apache.xerces</groupId>
<artifactId>xml-apis</artifactId>
<version>2.9.1</version>
Run Code Online (Sandbox Code Playgroud)

同时,组织B可能会发布jar如下:

<groupId>xml-apis</groupId>
<artifactId>xml-apis</artifactId>
<version>1.3.04</version>
Run Code Online (Sandbox Code Playgroud)

虽然B的jar版本低于A版jar,但Maven并不知道它们是同一个版本,因为它们有不同 groupId的版本.因此,它无法执行冲突解决,并且两个 jars都将作为已解析的依赖项包含在内:

使用多个xml-apis解决了依赖关系

Classloader Hell …

java xerces classloader dependency-management maven

703
推荐指数
8
解决办法
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>
Run Code Online (Sandbox Code Playgroud)

然后在Pro-par的孩子,我可以使用junit:

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
    </dependency>
 </dependencies>
Run Code Online (Sandbox Code Playgroud)

但是,我想知道是否有必要在父pom中定义junit?为什么不直接在所需的模块中定义它?

dependency-management pom.xml maven

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

如何将本地.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')
} 
Run Code Online (Sandbox Code Playgroud)

你可以看到我在这里将.jar文件添加到referencedLibraries文件夹中:https://github.com/WalnutiQ/wAlnut/tree/version-2.3.1/referencedLibraries

但问题是当我运行命令时:在命令行上运行gradle我得到以下错误:

error: package com.google.gson does not exist
import com.google.gson.Gson;
Run Code Online (Sandbox Code Playgroud)

这是我的整个回购:https://github.com/WalnutiQ/wAlnut/tree/version-2.3.1

java dependency-management gradle gradle-eclipse build.gradle

542
推荐指数
14
解决办法
50万
查看次数

如何使用Composer安装特定版本的软件包?

我正在尝试使用Composer安装特定版本的软件包.我试过composer install,composer require但他们正在安装最新版本的软件包.如果我想要旧版本怎么办?

php dependency-management composer-php

264
推荐指数
5
解决办法
19万
查看次数

如何在纱线中清除缓存?

我正在为Facebook的纱线做一些基准测试.为此,我需要清除我的全局Yarn缓存.

有没有可用的命令?我已经强行删除了我的~/.yarn-cache文件夹,但这似乎是非常手动的.

javascript dependency-management npm yarnpkg

228
推荐指数
4
解决办法
12万
查看次数

Maven相当于python

我是一个java开发人员/ python初学者,我缺少我的maven功能,特别是依赖管理和构建自动化(我的意思是你不构建,但是如何创建一个包用于部署?)

有没有python相当于实现这些功能?
注意:我使用python 2.x.

谢谢.

python deployment dependency-management

134
推荐指数
5
解决办法
8万
查看次数

使用Maven强制重新下载版本依赖性

我正在开发一个依赖X的项目.反过来,X依赖于Y.

我曾经明确地将Y包含在我项目的pom中.然而,它没有被使用并且使事情变得更清洁,而是将它作为依赖项添加到X的pom中.X被标记为发布依赖项.

问题是,从我的项目的pom中删除Y并将其添加到X的pom后,我的项目没有接受它mvn -U clean package.我知道-U更新快照但不更新版本.

因此,在不删除〜/ .m2/repository目录的情况下,如何强制重新下载X的pom?此外,我尝试运行dependency:purge-local-repository,它也没有工作.

maven-2 dependency-management maven maven-dependency-plugin

120
推荐指数
9
解决办法
18万
查看次数