【问题标题】:using maven to manage java dependencies in a jruby rails app使用 maven 管理 jruby rails 应用程序中的 java 依赖项
【发布时间】:2010-02-10 08:35:02
【问题描述】:

我正在尝试编写一个 pom.xml,它允许我在本地运行命令并获取我的 jruby Rails 应用程序具有的所有依赖项。虽然我看到了两种不同的配置,但我不完全确定要使用哪个(因为我不是 java 人)

首先,我看到的许多 Pom 只是在 pom.xml 的根目录下有一个标签,列出了所有依赖项。然而,这没有关于这些存储位置等的任何信息......所以我觉得这不是我想要的(我需要将它们复制到我的 rails lib 目录)

第二个选项,我在 mvn 文档中看到的是使用 maven-dependency-plugin,这似乎更像我正在寻找的。我假设我的 outputDirectory 类似于lib

所以我不完全理解第一个选项的依赖列表的目的是什么。我想要的只是 mvn 在本地复制我的 jars(然后最终当我的 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>

【问题讨论】:

    标签: maven-2 dependencies jrubyonrails


    【解决方案1】:

    首先,我看到的许多 Pom 只是在 pom.xml 的根目录下有一个标签,列出了所有依赖项。然而,这没有关于这些存储位置等的任何信息......所以我觉得这不是我想要的(我需要将它们复制到我的 rails lib 目录)

    这是在 Java 项目中声明和使用依赖项的传统方式。 &lt;dependencies&gt; 元素下的声明 依赖项从“远程存储库”下载并安装到您的“本地存储库”(默认为~/.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 显示了另一种基于操作系统命令的方法(使用 maven exec 插件),并且有一个完整的 pom.xml 做一些其他事情。也许您应该看看它并将其用作起点,而不是重新发明一切。这其实是我的建议。

    【讨论】:

    • 哇,谢谢你的链接,我搜索了一个多小时才找到类似的东西。另外,谢谢您的信息。如果我理解正确,那么:如果我在 标记的 pom 中的项目根目录中定义我的依赖项,我不使用 maven-dependency-plugin 并且我(某处)在我的 pom 中描述复制的位置他们。如果我没有在该根依赖项标记中定义我的依赖项,而是在 maven-dependency-plugin 中定义我的依赖项,我将每个依赖项指定为一个工件,包括我希望将其复制到的位置??
    • hmmm...不幸的是,这更像是部署应用程序的 pom,他们在其中设置战争、文件并将文件复制到该战争。不完全是我想要的,但我很确定我明白我需要什么。
    • @brad 不客气。现在,关于你的问题:不完全是。在这两种情况下,您都将使用 maven-dependency-plugin,但它有 几个 目标(如果您愿意,可以调用它)并且您只需使用不同的目标。如文档所述,dependency:copy 采用插件配置部分中定义的工件列表。另一方面,dependency:copy-dependencies 获取项目直接依赖项列表 (...)。我没有提供配置 sn-p 因为我认为这不相关。如果您真的想看看如何做到这一点,请告诉我。
    • @brad 最后,你不需要战争吗?
    • 不,我认为这就足够了。是的,最后我确实想要一个 War 文件,但我将把它留给我的 CI 服务器 Hudson。因此,在某些时候,我需要编写我的 pom 以允许 Hudson 实现这一点,但目前我将仅使用 Maven 进行依赖管理,并使用我当前的 Capistrano/Warbler(这是一个 Rails 的东西)设置实际上创建战争和部署。再次感谢
    猜你喜欢
    • 1970-01-01
    • 2011-04-07
    • 2023-04-09
    • 2013-04-22
    • 1970-01-01
    • 1970-01-01
    • 2014-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多