我正在尝试编写一个pom.xml,它允许我在本地运行命令并获取我的jruby Rails应用程序所具有的所有依赖项。我看到两种不同的配置但我不完全确定使用哪种(因为我不是一个java人)
首先,我看到许多Pom只在pom.xml的根目录下有一个标记列出所有依赖项的标记。然而,这并没有关于这些存储位置的任何信息等...所以我觉得这不是我想要的(我需要将它们复制到我的rails lib目录)
第二个选项,我在mvn文档中看到的是使用maven-dependency-plugin,这看起来更像我正在寻找的东西。我假设我的outputDirectory类似于lib
所以我不完全理解第一个选项的依赖列表的用途是什么。我想要的只是在本地复制我的罐子(最后当我的CI服务器进行部署时)。有人能指出我正确的方向吗?
第一个选项
<project>
<dependencies>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.4</version>
</dependency>
</project>
第二个选项
<project>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<configuration>
<artifactItems>
<artifactItem>
<groupId>[ groupId ]</groupId>
<artifactId>[ artifactId ]</artifactId>
<version>[ version ]</version>
<type>[ packaging ]</type>
<classifier> [classifier - optional] </classifier>
<overWrite>[ true or false ]</overWrite>
<outputDirectory>[ output directory ]</outputDirectory>
<destFileName>[ filename ]</destFileName>
</artifactItem>
</artifactItems>
<!-- other configurations here -->
</configuration>
</plugin>
</plugins>
</build>
</project>
答案 0 :(得分:1)
首先,我看到许多Pom只在pom.xml的根目录下有一个标记列出所有依赖项的标记。然而,这并没有关于这些存储位置的任何信息等...所以我觉得这不是我想要的(我需要将它们复制到我的rails lib目录)
这是在Java项目上声明和使用依赖项的传统方法。 <dependencies>
元素下的声明的依赖关系从“远程存储库”下载并安装到“本地存储库”(默认情况下为~/.m2/repository
),然后从那里处理工件。 Maven项目(至少是Java项目)不使用本地lib/
文件夹作为其依赖项。
第二个选项,我在mvn文档中看到的是使用maven-dependency-plugin,这看起来更像我正在寻找的东西。我假设我的outputDirectory就像lib
maven dependency plugin允许与工件交互,并将它们从本地或远程存储库复制/解压缩到指定位置。所以它可以用来获取一些依赖关系并将它们复制到一个lib/
目录中。实际上,它有几个目标允许这样做:
- dependency:copy获取插件中定义的工件列表 配置部分并复制它们 到指定位置,重命名它们 或根据需要剥离版本。 此目标可以解决工件 来自远程存储库,如果他们不这样做 存在于本地。
- dependency:copy-dependencies直接获取项目列表 依赖关系和可选的传递 依赖项并将它们复制到 指定位置,剥离 版本,如果需要。这个目标也可以 从命令行运行。
第一个目标是使用您在第二个选项中描述的设置。第二个目标将使用您在第一个选项中描述的标准项目依赖项。这两种方法都有效。
这里的问题是我不确切知道JRuby Rails应用程序是什么,开发工作流程是什么,如何构建这样的应用程序等等所以我不确切知道你需要做什么,因此什么是使用Maven实现这一点的最佳方式。
所以我搜索了一下,发现this post显示了另一种基于OS命令的方法(使用maven exec插件)并且有一个完整的pom.xml
做其他事情。也许你应该看一下它并将它作为起点而不是重新发明一切。这实际上是我的建议。