我正在使用命令行中的maven-dependency-plugin来下载单个文件,但是在我的本地存储库中,对于我的特定用例,我希望将它下载到当前目录.
我正在使用该插件的2.4版,它应该支持-Ddestination作为备用下载站点; 但是,我无法让它发挥作用.在调试模式下运行maven似乎表明目标参数被忽略...
我正在运行以下内容:
M:\>mvn -e -X org.apache.maven.plugins:maven-dependency-plugin:2.4:get \
-Ddestination=M:\test \
-DremoteRepositories=http://nexus-repo:8080/nexus/content/repositories/snapshots \
-Dartifact=com.company.Common:CommonLibs:1.12.0-SNAPSHOT:tar \
-Dtransitive=false
Run Code Online (Sandbox Code Playgroud)
......但得到这个......
[DEBUG] Configuring mojo 'org.apache.maven.plugins:maven-dependency-plugin:2.4:get' -->
[DEBUG] (f) artifact = com.company.Common:CommonLibs:1.12.0-SNAPSHOT:tar
[DEBUG] (f) localRepository = Repository[local|file://C:\Subversion\LocalMavenRepo]
[DEBUG] (f) packaging = jar
[DEBUG] (f) pomRemoteRepositories = [Repository[central|http://repo1.maven.org/maven2]]
[DEBUG] (f) remoteRepositories = http://nexus-repo:8080/nexus/content/repositories/snapshots
[DEBUG] (f) repositoryId = temp
[DEBUG] (f) transitive = false
[DEBUG] -- end configuration --
[INFO] [dependency:get {execution: default-cli}]
[DEBUG] Skipping disabled repository central
[INFO] snapshot com.company.Common:CommonLibs:1.12.0-SNAPSHOT: checking for updates from temp
[DEBUG] …Run Code Online (Sandbox Code Playgroud) 我包装了EJB,我需要包括从依赖到罐子一些.classes,我试图使用Maven的依赖,插件解压神器将文件放在我的$ {project.build.directory在包阶段期间/ classes目录,但是当我执行mvn包时,我没有看到任何日志或对maven-dependency-plugin的引用(没有任何反应),我甚至尝试使用无效版本的插件,它甚至没有抛出异常.
在我的pom.xml下面
....
<packaging>ejb</packaging>
<name>myapp</name>
...repository and props
<build>
<pluginManagement>
<plugins>
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<id>unpack</id>
<phase>package</phase>
<goals>
<goal>unpack</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>com.myapp</groupId>
<artifactId>model</artifactId>
<version>1.0.0</version>
<type>jar</type>
<overWrite>true</overWrite>
<outputDirectory>${project.build.directory}/classes</outputDirectory>
<includes>**/shared/*.class</includes>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ejb-plugin</artifactId>
<version>2.3</version>
<configuration>
<ejbVersion>3.0</ejbVersion>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
<dependencies>
<dependency>
<groupId>com.myapp</groupId>
<artifactId>model</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
PS:工件模型安装在本地仓库中,我也尝试过其他阶段.
我正试图从我的POM获得一个简单的,机器可解析的依赖项列表.如果我做:
mvn org.apache.maven.plugins:maven-dependency-plugin:2.1:list -f sample.pom
Run Code Online (Sandbox Code Playgroud)
我得到了无意义的[INFO]输出:
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Building Unnamed - my-group:my-project:jar:1.0
[INFO] task-segment: [org.apache.maven.plugins:maven-dependency-plugin:2.1:list]
[INFO] ------------------------------------------------------------------------
[INFO] [dependency:list {execution: default-cli}]
[INFO]
[INFO] The following files have been resolved:
[INFO] com.squareup.picasso:picasso:jar:2.5.2:compile
[INFO] commons-io:commons-io:jar:1.3.2:compile
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1 second
[INFO] Finished at: Mon Jan 11 14:06:05 GMT 2016
[INFO] Final Memory: 17M/325M
[INFO] ------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
然后我必须手动刮取信息.如果我添加-q开关
mvn -q org.apache.maven.plugins:maven-dependency-plugin:2.1:list -f sample.pom
Run Code Online (Sandbox Code Playgroud)
如果它已经是本地的,我会得到一个下载进度消息或什么都没有(除非当然有错误).
是否真的没有办法执行依赖列表命令,所以它只输出一个简单的下载依赖列表?就像是:
> mvn …Run Code Online (Sandbox Code Playgroud) 我需要从一个依赖的jar文件到我的当前项目的输出目录的根目录的根目录复制的资源文件(menu.xml文件),在生成过程中被执行的测试之前.该文件必须可用于测试,但稍后也可用于主程序...getClassLoader().getResourceAsStream("menu.xml").
我正在尝试在这个问题中提出的解决方案,但它不起作用.
这是pom文件的样子:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>resource-dependencies</id>
<phase>process-test-resources</phase>
<goals>
<goal>unpack-dependencies</goal>
</goals>
<configuration>
<type>jar</type>
<includeArtifactIds>pm1j-jar</includeArtifactIds>
<includes>menu.xml</includes>
<outputDirectory>${project.build.outputDirectory}</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
当我执行时,mvn clean process-test-resources我看到以下输出:
[INFO] --- maven-resources-plugin:2.7:testResources (default-testResources) @ pm1-config ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 3 resources
[INFO]
[INFO] --- maven-dependency-plugin:2.8:unpack-dependencies (resource-dependencies) @ pm1-config ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 8.709 s
[INFO] Finished at: 2016-05-05T15:01:06-03:00
[INFO] Final Memory: 30M/458M
[INFO] ------------------------------------------------------------------------ …Run Code Online (Sandbox Code Playgroud) 我想用我的主要Java项目及其所有依赖项创建一个jar文件。所以我在pom文件中创建了以下插件定义:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.5.1</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<!-- exclude junit, we need runtime dependency only -->
<includeScope>runtime</includeScope>
<outputDirectory>${project.build.directory}/dependency-jars/</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
所以我执行mvn dependency:copy-dependencies,将所有的依赖复制到target/dependency而不是复制上很好dependency-jars。有任何想法吗?
我试图在实际使用它们之前从maven项目下载所有插件依赖项.
我试过跑:
mvn dependency:resolve-plugins
Run Code Online (Sandbox Code Playgroud)
这成功下载了它的插件和部分依赖项.例如,对于exec插件,我得到:
...
[INFO] Plugin Resolved: exec-maven-plugin-1.6.0.jar
Downloading: https://repo.maven.apache.org/maven2/org/apache/maven/maven-toolchain/2.2.1/maven-toolchain-2.2.1.jar
Downloaded: https://repo.maven.apache.org/maven2/org/apache/maven/maven-toolchain/2.2.1/maven-toolchain-2.2.1.jar (37 KB at 437.4 KB/sec)
Downloading: https://repo.maven.apache.org/maven2/org/apache/maven/maven-artifact-manager/2.2.1/maven-artifact-manager-2.2.1.jar
Downloaded: https://repo.maven.apache.org/maven2/org/apache/maven/maven-artifact-manager/2.2.1/maven-artifact-manager-2.2.1.jar (66 KB at 709.6 KB/sec)
Downloading: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-utils/3.0.20/plexus-utils-3.0.20.jar
Downloaded: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-utils/3.0.20/plexus-utils-3.0.20.jar (238 KB at 1785.2 KB/sec)
Downloading: https://repo.maven.apache.org/maven2/org/apache/commons/commons-exec/1.3/commons-exec-1.3.jar
Downloaded: https://repo.maven.apache.org/maven2/org/apache/commons/commons-exec/1.3/commons-exec-1.3.jar (54 KB at 610.9 KB/sec)
[INFO] Plugin Dependency Resolved: maven-toolchain-2.2.1.jar
[INFO] Plugin Dependency Resolved: maven-project-2.2.1.jar
[INFO] Plugin Dependency Resolved: maven-model-2.2.1.jar
[INFO] Plugin Dependency Resolved: maven-artifact-2.2.1.jar
[INFO] Plugin Dependency Resolved: maven-artifact-manager-2.2.1.jar
[INFO] Plugin Dependency Resolved: maven-core-2.2.1.jar
[INFO] Plugin Dependency Resolved: …Run Code Online (Sandbox Code Playgroud) 我们不需要指定我们使用的Maven依赖项和插件的版本和其他参数。我们只能在父 POM 中执行一次,或者可以通过其他方式在子 POM 中继承该属性。
不幸的是,我多次遇到无法轻松找到依赖项和插件的真实参数的项目。即依赖项的版本为空,但在父 POM 中没有有关此的信息。
所以我的问题是:
在Maven中指定依赖和插件的参数有哪些可能的方式?即,如果版本号既不存在于子 POM 的插件中,也不存在于父 pom 的插件管理中,我可以在哪里查找版本号?
有没有 Maven 命令可以找出 Maven 从哪里获取这些参数?例如,我可能会使用该dependency:tree命令。它将打印一个依赖项列表,这将帮助我理解我所困扰的版本依赖项。但这是一个黑客,它不能帮助我使用插件。也许有更好的东西?
如何使用maven依赖插件,unpack-dependecies目标解压缩到绝对路径,即在项目树中生成的目标文件夹中不相对?例如,我想在/ usr/local/*中解压缩下面两个依赖项的工件
<dependencies>
<dependency>
<groupId>package.org.apache.apr</groupId>
<artifactId>apr-bin</artifactId>
<version>1.4.6</version>
<classifier>bin</classifier>
<type>tar.gz</type>
</dependency>
<dependency>
<groupId>package.org.apache.apr-util</groupId>
<artifactId>apr-util-bin</artifactId>
<version>1.4.1</version>
<classifier>bin</classifier>
<type>tar.gz</type>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.7</version>
<executions>
<!-- Unpack header files and libraries for build -->
<execution>
<id>apr-bin-unpack</id>
<phase>generate-sources</phase>
<goals>
<goal>unpack-dependencies</goal>
</goals>
<configuration>
<excludeTransitive>true</excludeTransitive>
<!-- This element does NOT make a difference -->
<outputdirectory>/usr/local</outputdirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
Run Code Online (Sandbox Code Playgroud) 当我构建 maven 项目时,有没有一种方法可以根据给定的条件设置依赖项。
mvn package someCondition
Run Code Online (Sandbox Code Playgroud)
因此,如果我说mvn install A它应该添加一个依赖项,如果说mvn install B它应该添加另一种类型的依赖项。
请帮忙。谢谢你
PS 有没有办法通过创建多个配置文件来做到这一点?