1

我正在尝试构建一个自定义 protoc 插件来从 .proto 文件生成自定义输出。我从protoc 自定义插件中复制了包含 CodeGenerator 的 java 文件作为起点并将其重命名。我还关注了可执行文件并创建了 .sh 文件。我的shell脚本的内容如下。

例子.sh

我还添加了插件执行的 PATH 变量值和输出。有人可以指出我哪里出了问题吗?shell 脚本运行良好,分别执行 main 方法

在此处输入图像描述

4

3 回答 3

1

如果那是您的全部example.sh,它将不起作用,因为它没有标识脚本解释器的“hashbang”行。

它应该是这样的:

#!/bin/bash
set -e
java cp ...

我认为这可能是您的问题,因为我尝试以protoc与您相同的方式运行和指定插件,并且只要插件实际上可以自行执行,它就可以工作。

于 2020-06-07T19:26:17.767 回答
0

错误消息在protoc这里有点神秘。您有 3 个选项来提供插件protoc

  1. $PATH您遵循protoc-gen-$NAME格式的插件。这将被自动拾取。
  2. 一个不符合上述命名约定的插件,但在您的$PATH. 这可以使用--plugin=$some-nonconventional-name.
  3. 不在您的$PATH. 这需要为可执行文件提供绝对路径或相对路径(从当前工作目录)。这是执行--plugin=proto-gen-$any-name-you-want=$path-to-executable

扩展上面的3。如果你创建一个文件example-plugin

#!/bin/bash

echo "Example Plugin Running!"

然后,您需要确保它是可执行的:

chmod +x ./example-plugin

我们需要一个输出目录,让我们创建一个:

mdkir plugin-output

我们需要一个.proto文件。找到一个并将其命名为您喜欢的任何名称,例如MyProto.proto

让我们为这个插件选择一个任意名称。我们可以称之为foo

然后,您protoc将按如下方式执行它:

protoc --plugin=protoc-gen-foo=$PATH_TO_EXAMPLE_PLUGIN --foo_output=./plugin-output  MyProto.proto 

您应该会看到如下内容:

--foo_out: protoc-gen-foo: Plugin output is unparseable: Example Plugin Running!\n
于 2021-07-17T01:50:19.553 回答
0

使用example.sh的绝对路径怎么样?protoc 工作目录可能不是当前文件夹。

于 2020-06-05T05:08:30.017 回答