【问题标题】:Is it possible to define a pom.xml in a subdirectory (instead that in the project root)?是否可以在子目录中定义 pom.xml(而不是在项目根目录中)?
【发布时间】:2015-11-30 14:44:21
【问题描述】:

我在最近的项目中使用了 MAVEN,现在我也想继续使用它,因为我在一个 SVN 存储库下发布的项目使用 Hooks 检查特定结构( ANT + IVY 相关)允许/(项目根)中的build.xml,但不允许pom.xml

我可以将pom.xml 放入/src 吗?

我应该在 pom 中修改什么以使其意识到这一点吗?

【问题讨论】:

  • 我想这在理论上是可能的,但我什至无法想象所有会出错的事情。 Maven 中的所有内容都与 POM 的位置相关。
  • 该死的......在 MAVEN 中没有像 ANT 的 basedir 这样的设置吗? :(( 愚蠢的 SVN 钩子
  • Maven 的方法是“约定优于配置”,因此它强制执行标准文件夹布局,帮助所有程序员和工具开发人员高效工作。即使有办法配置它,它也不是最好的方法。最好将 IVY 与 ANT 一起用于项目的其余部分。
  • @AndreaLigios 根据您的其他 cmets 和讨论,我可以看到您确实有一个可以争论的动机来找到您的问题的答案,并且您正在使用正式的答案来做这件事。这就是为什么我赞成这个问题。
  • 我已经拆除了钩子!!!我想这个问题对像我这样不走运的人会有用,我想 :) 谢谢大家跨度>

标签: java maven svn maven-3 pom.xml


【解决方案1】:

在运行 maven 时尝试使用选项-f

mvn -f src/pom.xml

我个人没有尝试过,但希望它会起作用。

但是,为什么?

我建议您停下来重新考虑您的要求。 maven 的优点之一是它的默认配置。一旦您按照 maven 规定的标准进行操作,您就不会遇到各种插件等问题。

编辑。

我试过了,发现我的第一个建议不起作用。为了使其正常工作,您必须更新其他参数,例如源位置。我仍然相信这是可能的,但我建议你做点别的。

如果 SVN 不允许您将 pom.xml 放在其他位置,请将其放入源文件夹。还要创建批处理文件或 shell 脚本(取决于您的平台),将 pom.xml 复制到根目录,运行mvn,然后从根目录中删除 pom.xml。恕我直言,这个解决方案清晰而简单。

【讨论】:

  • 我认为这行不通。 basedir 将是 src 并且一切都会被破坏(Maven 将在 src/src/main/java 中寻找源代码等等)。
  • @AlexR:问题中描述了为什么:我在一个不允许我在根目录中提交 POM.XML 的 SVN 存储库上。通常我在另一个允许我这样做的 SVN 存储库中。
  • 我尝试了我的建议,发现它不起作用。我将用其他建议更新我的答案。
【解决方案2】:

可以,你可以使用-f src选项来选择pom所在的目录。详情见maven的源码:

    String alternatePomFile = null;
    if ( commandLine.hasOption( CLIManager.ALTERNATE_POM_FILE ) )
    {
        alternatePomFile = commandLine.getOptionValue( CLIManager.ALTERNATE_POM_FILE ); // -f
    }

    ...

    if ( alternatePomFile != null )
    {
        File pom = resolveFile( new File( alternatePomFile ), workingDirectory );
        if ( pom.isDirectory() )
        {
            pom = new File( pom, "pom.xml" );
        }

        request.setPom( pom );
    }

【讨论】:

  • 是的,你可以,但是根据另一个答案的测试(和 cmets),没有任何效果;我对此表示赞同,因为他已经尝试了解决方案,节省了我的时间,然后编辑了答案说它不起作用;我不会对此表示赞同,因为未来的访问者可以解释像工作答案这样的积极答案,而事实并非如此(除非被证明是错误的)。但是,感谢您的时间(我总是喜欢带有源代码的答案)
  • 等等,我在编译文件夹中找到了src/src
  • 也许您可以删除build.xml 的内容并将pom.xml 粘贴到build.xml 中。然后mvn clean install -f build.xml 就可以了。
【解决方案3】:

应该有几种(邪恶的)方法来绕过钩子施加的限制,而我们正在寻找的是较小的邪恶。 关键要求是: - 您必须使用 ANT/IVY 结构。 - 你不能用 pom.xml 建立一个正式的 Maven 结构。 - 你必须使用 Maven。

如果我真的没有其他选择,我会创建一个 ant 任务来复制文件 从某个地方我可以合法地将它保存到它应该被发现的地方。 见:https://ant.apache.org/manual/Tasks/copy.html

还有一个运行 maven 的 ant 任务。 见:How to call for a Maven goal within an Ant script?

每个人都会使用执行这两个步骤的确切 ant 脚本。 我将在自述文件中描述此过程并解释为什么必须这样做。

优点:自动化、清晰的解决方案,以后可以轻松转换为 maven 项目。创建 pom.xml 后,就可以使用 MAVEN。但是我建议您始终使用 ant 调用 MAVEN 以避免手动监视 pom.xml 中的更改。 (您需要在 pom.xml 更新后至少调用一次 ANT。)

缺点:一群程序员需要熟悉这个非正式的过程,也使用 ANT。

【讨论】:

  • 我喜欢这个,+1。与此同时,我已经与系统工程师进行了交谈,他们正在讨论为我的项目移除挂钩的可能性......直到去年,这都是不可能的,让我们祈祷吧:)
  • 移除钩子是迄今为止最好的方法。我希望他们被删除。
  • 阅读问题的最后一条评论 :)
猜你喜欢
  • 2013-09-12
  • 2022-11-22
  • 2012-02-03
  • 1970-01-01
  • 1970-01-01
  • 2015-10-04
  • 1970-01-01
  • 1970-01-01
  • 2014-04-11
相关资源
最近更新 更多