Java 在bazel构建中作为工具运行mvn
我的项目中有一个棘手的模块,除了Maven之外,其他任何人都无法构建它。好的是,这个模块在我的项目中没有任何Java依赖项,它只生成一个Java 在bazel构建中作为工具运行mvn,java,maven,bazel,bazel-rules,Java,Maven,Bazel,Bazel Rules,我的项目中有一个棘手的模块,除了Maven之外,其他任何人都无法构建它。好的是,这个模块在我的项目中没有任何Java依赖项,它只生成一个.war文件,我需要将该文件移动到输出zip发行版中的正确位置 我想将构建迁移到bazel,但我想在迁移的后期处理这个棘手的模块 如何将mvn作为工具运行在我的bazel构建中,让它生成.war文件 Maven希望从包含pom.xml Maven将输出写入输入文件树的子目录 当settings.xml包含绝对路径(到本地Maven存储库的.war,存储在git
.war
文件,我需要将该文件移动到输出zip发行版中的正确位置
我想将构建迁移到bazel,但我想在迁移的后期处理这个棘手的模块
如何将mvn作为工具运行在我的bazel构建中,让它生成.war文件
- Maven希望从包含
pom.xml
- Maven将输出写入输入文件树的子目录
- 当settings.xml包含绝对路径(到本地Maven存储库的.war,存储在git中)时,Maven最开心
- Maven使用$HOME/.m2进行缓存
我看了rules_foreign_cc,它围绕cmake创建了一个包装器脚本。这是路吗 我有一个
mvn\u包
规则原型。你提出的观点是至关重要的;在Bazel更严格的动作执行环境中,要驯服Maven的惯例和期望需要一点时间
Maven希望从包含pom.xml的目录中执行
您可以使用-f
标志指定pom.xml
的位置
e、 g.mvn包-f%s-DskipTests-DbazelOutputDir=%s-Pbazel“%(ctx.file.pom\u xml.dirname,output\u jar.dirname)
Maven将输出写入输入文件树的子目录
我在pom.xml
to中为自定义Maven define创建了一个自定义概要文件,并传递了定义上述命令行的命令:
<profiles>
<profile>
<id>bazel</id>
<build>
<directory>${bazelOutputDir}</directory>
</build>
</profile>
</profiles>
并在生成文件中使用上述规则:
load(“@rules\ujvm\uexternal/:mvn.bzl”,“mvn\u包”)
mvn_包(
name=“你好”,
srcs=[
“//src/main/java/hello:srcs”,
],
pom_xml=“/:pom.xml”,
group_id=“org.springframework”,
工件\u id=“gs spring boot”,
version=“0.1.0”,
)
java_二进制文件(
name=“hello\u maven\u应用程序”,
运行时\u deps=[“:hello\u maven”],
main_class=“hello.Application”,
)
只是好奇(不知道bazel,但知道maven):哪些要点似乎有问题?为什么?@JFMeier所有这些;)可能看看bazel()下的博客运行工具对于更详细的要点;)可能有一个额外的随机要点,与此特定问题无关,但出现在mvn到bazel的一般迁移中。Maven从带有.class文件的目录运行测试。bazel始终构建一个测试jar并运行该测试。不应同时访问.HOME/.m2/存储库(),但通常是这样,因为bazel喜欢在默认情况下运行多个操作,可能同时运行多个mvn规则。settings.xml
中的绝对路径实际上很简单。在run_shell中,我可以设置env变量(我称之为ACTIONROOT,然后在settings.xml中,我将repo url设置为file://${env.ACTIONROOT}/..
processwrapper sandbox“很高兴让maven与$HOME/.m2交互,但“linux沙盒”阻止了那里的所有写入操作。到目前为止,我一直在使用processwrapper,但我想切换到linux沙盒,因为它是linux上的默认设置(如果可用)无论如何,我必须为这个规则添加额外的属性。例如,我需要指定我自己的-s设置.xml
。我还发现,除了包
,我还需要运行其他maven阶段,有时我确实想用子项目构建一个项目,并将部分/子项目/目标
作为输出访问,而不是JUt顶级目标
。