如何在与项目源不同的位置使用 pom.xml 运行 Maven

Mac*_*iak 6 java maven

我需要运行 Mavenpom.xml位于与项目其余部分不同的目录中的文件来运行 Maven。

\n

例如:

\n
.  maven-f-sample git:(main) \xe2\x9c\x97 tree .         \n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 etc\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 pom.xml\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 src\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 main\n        \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 java\n        \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 org\n        \xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 example\n        \xe2\x94\x82\xc2\xa0\xc2\xa0         \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 Main.java\n        \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 resources\n
Run Code Online (Sandbox Code Playgroud)\n

当我mvn从项目的根目录运行时,mvn compile -f etc/pom.xml它需要src目录etc/src.

\n

我知道我可以修改源目录和目标目录pom.xml

\n
<build>\n    <sourceDirectory>../src</sourceDirectory>\n    <directory>../target</directory>\n</build>\n
Run Code Online (Sandbox Code Playgroud)\n

但由于其他插件可能依赖于其他目录src我认为这不是一个可靠的解决方案。

\n

有没有一个技巧可以让 Maven 使用位于执行命令的同一目录中的源,或者使用另一个选项设置项目目录,而不修改pom.xml

\n

如果您想知道“为什么”?

\n

我意识到这不是使用 Maven 的典型方式 - 我专门需要它来运行时生成自定义pom.xml。现在它在项目目录中创建它,pom.xml.tmp但理想情况下它会在/tmp.

\n

Ben*_*Ben 0

虽然它不符合标准目录布局,但您可以尝试像这样调用maven:

mvn verify "-Dbasedir=$PWD" "-Dmaven.multiModuleProjectDirectory=$PWD"
Run Code Online (Sandbox Code Playgroud)

然而,这尚未经过测试,它是一个内部 API,正如 Karl Heinz 在评论中指出的那样。请不要使用它,尤其不要期望支持此配置。

也就是说:如果它不起作用,请不惜一切代价尝试遵守目录布局。

另请注意,某些插件仍然无法使用此配置:它们可能会添加具有不同逻辑的其他目录。

也就是说,解决方案(遗憾的是)只有:请修复您的项目。也许您可以将该文件链接到基本目录?

  • 我建议不要公开技术上可用的内部结构,但这会将这些内部结构公开为公共 API... (2认同)
  • 似乎不起作用。我同意遵守目录布局 - 这是一个特殊的用例。 (2认同)