我在Eclipse Indigo下创建了maven-achetype-quickstart的简单项目,然后我去了pom.xml gui编辑器,在依赖项选项卡中log4j通过搜索在相应的对话框中添加了依赖项.现在我的pom.xml看起来像
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org xsd/maven-.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>mygroup</groupId>
<artifactId>Test_Maven_03</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>Test_Maven_03</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.15</version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
Run Code Online (Sandbox Code Playgroud)
Eclipse说我的POM有许多问题,比如
缺少工件javax.jms:jms:jar:1.1 pom.xml/Test_Maven_03第2行Maven依赖问题
它是什么意思以及如何看到自动jar下载的maven功能.
编辑1
如果我选择log4j 1.2.16而不是1.2.15,我会收到另一个错误:Missing artifact log4j:log4j:bundle:1.2.16.所以我看不到自动的jar管理.
我在bower.json文件中和/或用Bower列出(和/或安装)了几个依赖项
bower install https://github.com/username/project.git
Run Code Online (Sandbox Code Playgroud)
这工作得很好.
现在我可以列出所有这些
bower list
Run Code Online (Sandbox Code Playgroud)
然后我可以选择项目的每个依赖项的名称并运行
bower update dependency-name
Run Code Online (Sandbox Code Playgroud)
问题:如何批量更新所有这些内容?或者我是否必须编写一个shell脚本来循环并更新它们?
我开发了一个带有一些功能名称的库,CompanyName.SDK它必须集成在公司项目中CompanyName.SomeSolution
CompanyName.SDK.dll必须通过NuGet包部署.并且CompanyName.SDK包依赖于第三方NuGet包.举个好例子,我们来看看吧Unity.当前的依赖是对v3.5.1405-prerelease的Unity.
CompanyName.SomeSolution.Project1取决于Unity v2.1.505.2.
CompanyName.SomeSolution.Project2取决于Unity v3.0.1304.1.
集成CompanyName.SDK到此解决方案中会增加依赖性Unity v3.5.1405-prerelease.我们假设CompanyName.SomeSolution有一个可运行的输出项目CompanyName.SomeSolution.Application,它取决于上面和下面的两个CompanyName.SDK
这里出现了问题.所有Unity程序集在所有包中都具有相同的名称,没有版本说明符 在目标文件夹中,它只是一个版本的Unity程序集:v3.5.1405-prereleasevia bindingRedirectin app.config.
如何代码Project1,Project2并SDK使用相关的软件包,他们进行编码,编译和测试用的确切需要的版本?
注1: Unity只是一个例子,第三方模块依赖于另一个第三方模块,实际情况要差10倍,而第三方模块又同时有3-4个版本.
注意2:我无法将所有软件包升级到最新版本,因为有些软件包具有依赖性非最新版本的其他软件包.
注3:假设依赖包在版本之间有重大变化.这是我提出这个问题的真正问题.
注4:我知道关于相同依赖程序集的不同版本之间的冲突的问题,但答案并没有解决问题的根源 - 它们只是隐藏它.
注5:地狱是否承诺"DLL Hell"问题解决方案?它只是从另一个位置重新出现.
注6:如果您认为使用GAC是某种选择,那么请逐步指导或给我一些链接.
我对Maven和pom.xml很新.有没有办法可以找出哪些依赖项已经过时,以便我可以更新我的pom.xml中的版本号.
例如,在其他语言中,Ruby有一个命令gem list outdated,它给我一个我可以更新的依赖项列表(rubygems)
我正在使用IntelliJ Idea,如果这可以帮助.
我正在使用Maven 3.1.1.在我的一个项目中,我引用了我的另一个项目......
<dependencies>
<dependency>
<groupId>org.mainco.subco</groupId>
<artifactId>myprojectA</artifactId>
<version>${project.version}</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
以上内容取决于我的其他几个项目.但是,当我运行"mvn clean install"时,Maven会尝试下载这些工件而不是仅仅使用我本地存储库中的内容.如果我的本地存储库中不存在Maven,我如何让它只下载?这是我所看到的输出......
davea$ mvn clean install
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building subco admin Module 57.0.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
Downloading: http://download.java.net/maven/2/org/mainco/subco/myprojectA/57.0.0-SNAPSHOT/maven-metadata.xml
Downloading: http://download.java.net/maven/2/org/mainco/subco/subco/57.0.0-SNAPSHOT/maven-metadata.xml
Downloading: http://download.java.net/maven/2/org/mainco/subco/projectB/57.0.0-SNAPSHOT/maven-metadata.xml
Downloading: http://download.java.net/maven/2/org/mainco/subco/projectC/57.0.0-SNAPSHOT/maven-metadata.xml
[INFO]
Run Code Online (Sandbox Code Playgroud) 我希望Heroku在我推送之后构建我的应用程序,这样我每次做出更改时都不必推送构建文件夹.但是heroku只安装package.json和grunt(我的构建工具)中的依赖项,并且它的所有组件都在devDependencies中.我想把它们留在他们所属的地方.这里的解决方法是什么?
在我的项目中声明的依赖项之一具有传递依赖性'com.google.guava:guava:15.0'.但是我在WAS/Weblogic上部署的应用程序由于已修复的CDI问题而无效'com.google.guava:guava:15.0:cdi1.0'.(相同版本,但有分类器)我需要告诉gradle在构建和打包过程中使用这个jar.我试图弄清楚如何使用jar特定的版本分类器来提取这种传递依赖.
试过以下方法:
compile 'com.google.guava:guava:15.0:cdi1.0'.但两个罐子都包含在最终的WAR中.明确添加了依赖关系并定义了解决策略:
configurations.all {
resolutionStrategy {
force 'com.google.guava:guava:15.0:cdi1.0'
}
}
Run Code Online (Sandbox Code Playgroud)
即使这样也行不通.
定义了检查和更改版本的解决方案策略.
configurations.all {
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
if (details.requested.group + ":" + details.requested.name == 'com.google.guava:guava') {
details.useVersion "15.0:cdi1.0"
//details.useTarget "com.google.guava:guava:15.0:cdi1.0"
}
}
}
Run Code Online (Sandbox Code Playgroud)
即使这样也行不通.
需要您就如何解决此问题提出建议.
我有一个maven多模块项目(男孩,我已经写了打开方式在这个网站太多次了).几乎所有模块(即其中包含代码的模块)都应运行maven-site-plugin来生成有关代码覆盖率等的报告.这些模块具有详细的共享配置 - 报告运行,要覆盖哪些文件/排除某些插件等
但是,有一些模块可以处理打包 - 运行程序集插件以生成tarball等.这些都不会从运行站点报告中获得任何好处 - 没有可以分析的代码,也没有可以报告的测试.
所以我有很多需要共享插件配置的模块,以及一些不需要运行插件的模块,最好是根本不需要.如果我把插件放在<build>父POM 的部分中,我可以做前者(共享配置),但在这种情况下,我似乎无法关闭插件.如果我将配置下推到每个模块自己的POM,我可以做后者(避免运行插件),但在这种情况下我无法想出一个分享配置信息的好方法.
我想要的是 - 共享配置,对于有时被子模块禁用的插件 - 甚至可能吗?如果是这样,怎么样?
我希望能够通过bower安装Javascript依赖项并在sails.js应用程序中使用它们,但我无法找到一种方法来解决这个问题,只需将粘贴文件从bower_components文件夹复制到Sails资源文件夹.
理想情况下,我认为我想使用requirejs,并指向凉亭的部件中main.js的文件.我可能会试图在一个圆孔中敲一个方形钉,如果有的话请告诉我.components/libraries欢迎任何有关管理Sails的想法.
我有几年的maven项目经验,即使是多模块项目(这让我讨厌 maven的多模块功能(所以免责声明现在已经完成))即使我真的很喜欢maven也有一些我无法得到的东西明确答案:
多模块maven项目的典型用例是什么?与简单的依赖关系和父pom相比,这种结构的附加价值是多少?
我已经看到了很多多模块项目的配置,但是所有这些项目都可以通过创建一个简单的依赖库结构来实现,这些结构依赖于自己的生命作为可交付成果(即使使用父pom,作为单独的可交付成果:分解依赖和配置)我没有找到任何用例,我可以清楚地看到多模块结构的附加值.
我一直发现这种结构带来了过度的复杂性而没有真正的好处:我在哪里错过了什么?(说实话,我可以得到一些ear可以受益于这种结构,但除了特定的用例,任何其他真正的用途和好处?)