Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.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 在bazel构建中作为工具运行mvn_Java_Maven_Bazel_Bazel Rules - Fatal编程技术网

Java 在bazel构建中作为工具运行mvn

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

我的项目中有一个棘手的模块,除了Maven之外,其他任何人都无法构建它。好的是,这个模块在我的项目中没有任何Java依赖项,它只生成一个
.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顶级
目标