Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否可以在子目录(而不是项目根目录)中定义pom.xml?_Java_Maven_Svn_Maven 3_Pom.xml - Fatal编程技术网

Java 是否可以在子目录(而不是项目根目录)中定义pom.xml?

Java 是否可以在子目录(而不是项目根目录)中定义pom.xml?,java,maven,svn,maven-3,pom.xml,Java,Maven,Svn,Maven 3,Pom.xml,我在最近的项目中使用过MAVEN,现在我也希望继续使用它,因为我正在SVN存储库下发布的一个项目中,使用钩子检查特定的结构(与ANT+IVY相关),该结构允许在/中使用build.xml(项目根),但不是一个pom.xml 我可以将pom.xml放在/src中吗 我是否应该在pom中修改某些内容,以使其了解这一点 运行maven时,尝试使用选项-f: mvn -f src/pom.xml 我个人还没有尝试过,但希望它能起作用 但是,为什么呢 我建议你停下来重新考虑一下你的要求。maven的优点

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

我可以将
pom.xml
放在
/src
中吗

我是否应该在pom中修改某些内容,以使其了解这一点

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

mvn -f src/pom.xml
我个人还没有尝试过,但希望它能起作用

但是,为什么呢

我建议你停下来重新考虑一下你的要求。maven的优点之一是它的默认配置。一旦你按照maven规定的标准去做,你就不会有各种插件的问题

编辑

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


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

是的,您可以使用
-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 );
    }
应该有几种(邪恶的)方法来绕过钩子施加的限制,我们正在寻找的是较小的邪恶。 关键要求是: -您必须使用ANT/IVY结构。 -对于pom.xml,不能有正式的Maven结构。 -你必须使用Maven

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

还有一个运行maven的ant任务。 见:

每个人都会使用完成这两个步骤的ant脚本。 我会在自述文件中描述这个过程,并解释为什么要这样做

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


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

我想这在理论上是可能的,但我甚至无法想象所有会出错的事情。Maven的一切都和POM的位置有关该死的。。。MAVEN中是否有类似ANT的
basedir
设置((愚蠢的SVN hooksMaven的方法是“约定优先于配置”,因此它强制执行一个标准的文件夹布局,帮助所有程序员和工具开发人员高效地工作。即使有办法进行配置,这也不是最好的方法。最好使用IVY和ANT来处理项目的其余部分。@AndreaLigios根据您的其他评论和讨论,我可以看出,你确实有一个值得商榷的动机来寻找你问题的答案,而且你是用一个正式的答案来做的。这就是为什么我对这个问题投了高票。我已经去掉了钩子!!!我想这个问题对像我这样不走运的人很有用,我想:)多亏了allI,我认为这不会起作用。basedir将是
src
,一切都将被破坏(Maven将在
src/src/main/java
中查找源代码等等)@AlexR:问题中描述了原因:我在一个SVN存储库中,它不允许我在根目录中提交POM.XML。通常,我在另一个SVN存储库中,它允许我这样做。我尝试了我的建议,但发现它不起作用。我将用其他建议更新我的答案。是的,你可以,但根据你的建议,没有任何效果o来自另一个答案的测试(和评论);我对此进行了更新投票,因为他尝试了解决方案,节省了我的时间,然后编辑了答案,说它不起作用;我不会更新投票,因为未来的访问者可以将肯定的答案解释为工作答案,而事实并非如此(除非证明错误)。不过,感谢您抽出时间(我总是喜欢答案中包含源代码)等等,我在编译文件夹中找到了
src/src
,你可以删除
build.xml
的内容,然后将
pom.xml
粘贴到
build.xml
中。然后一个
mvn干净的安装-f build.xml
就可以了。我喜欢这个,+1。与此同时,我已经和系统工程师谈过,他们正在讨论pos为我的项目移除挂钩的可能性…到去年为止,这是不可能的,让我们祈祷:)移除挂钩将是目前为止最好的方法。我希望它们被删除。请阅读问题的最后一条评论:)