如何将google.protobuf.Timestamp与protoc-jar-maven-plugin一起使用? - java

我一直在尝试将protobuf类型google.protobuf.Timestampprotoc-jar-maven-plugin一起使用,但只会出现以下编译时错误:

google/protobuf/timestamp.proto: File not found.
test.proto: Import "google/protobuf/timestamp.proto" was not found or had errors.
test.proto:9:5: "google.protobuf.Timestamp" is not defined.

原始文件如下所示:

syntax = "proto3";

import "google/protobuf/timestamp.proto";

package test;
option java_package = "test";

message TestTimestamp {
    google.protobuf.Timestamp liveStartDate = 1;
}

pom文件具有以下配置:

<build>
    <plugins>
        <plugin>
            <groupId>com.github.os72</groupId>
            <artifactId>protoc-jar-maven-plugin</artifactId>
            <version>3.6.0.1</version>
            <executions>
                <execution>
                    <id>protoc.main</id>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>run</goal>
                    </goals>
                    <configuration>
                        <protocVersion>3.6.0</protocVersion>
                        <addSources>main</addSources>
                        <includeDirectories>
                            <include>src/main/protobuf</include>
                        </includeDirectories>
                        <inputDirectories>
                            <include>src/main/protobuf</include>
                        </inputDirectories>
                    </configuration>
                </execution>
            </executions>
        </plugin>

    </plugins>
</build>

据我了解,这种类型是proto3的一部分,那么为什么会出现这些错误?

参考方案

事实证明,由于此类型不是标准类型之一,因此Maven插件需要其他配置才能起作用,即<includeMavenTypes>direct</includeMavenTypes>参数,如下所示:

<build>
    <plugins>
        <plugin>
            <groupId>com.github.os72</groupId>
            <artifactId>protoc-jar-maven-plugin</artifactId>
            <version>3.6.0.1</version>
            <executions>
                <execution>
                    <id>protoc.main</id>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>run</goal>
                    </goals>
                    <configuration>
                        <protocVersion>3.6.0</protocVersion>
                        <addSources>main</addSources>
                        <includeMavenTypes>direct</includeMavenTypes>
                        <includeDirectories>
                            <include>src/main/protobuf</include>
                        </includeDirectories>
                        <inputDirectories>
                            <include>src/main/protobuf</include>
                        </inputDirectories>
                    </configuration>
                </execution>
            </executions>
        </plugin>

    </plugins>
</build>

使用此配置,可以编译原始文件。

Java:javaagent无法访问tools.jar - java

我正在开发一个Java代理,它通过tools.jar之类的反射使用com.sun.tools.javac.util.Options中的某些类。为了测试我的代理,我要设置set JAVA_TOOL_OPTIONS=-javaagent:path-to-my-agent-jar并在将Java代理挂接到的简单gradle项目上启动构建。我已将tools.jar添加…

在一个Java应用程序中需要两个不同版本的JAR - java

我有一个Java应用程序,其中包含两个第三方JAR(Amazon Kinesis和MaxMind GeoIP2),每个都使用不同版本的Jackson。两种版本的Jackson都不能与两个第三方JAR一起使用。此外,我正在运行Apache的maven JAR插件-这将创建一个包含所有依赖类的uber JAR。鉴于我无法更改第三方JAR,我不知道如何才能使每个第…

使用Launch4j,何时应该包装Jar? - java

我是Launch4j的新手。默认情况下,它“包装”罐子,但是有一个复选框显示为“不包装罐子,仅启动”。我何时应选中此框?什么时候不应该选中此框? 参考方案 唯一的区别是,当您选中此选项时,jar文件未打包在生成的可执行文件中,并且它旁边需要jar文件。因此,如果要向用户隐藏jar并只有一个可执行文件,则不要选中该框,如果愿意将可执行文件和jar文件分开,则应…

是否存在可以透明地构建请求的但缺少本地工件的Maven存储库? - java

我们正在美化现有的开发流程,并且发现,如果我们新的内部Maven工件存储库可以透明地触发构建缺失的内部工件,那么这将使后勤工作变得更加简单。换句话说,开发人员需要在发行版X.Y.Z中处理依赖于我们自己的组件B的组件A,并且由于某种原因该资源在存储库中不存在。但是,我们知道在给定所需的发行版号的情况下,确切地如何构建B的发行版,并且拥有一个可脚本化的过程来检出…

如何使Eclipse包仅是必需的库? - java

在Eclipse中开发了一个Java应用程序之后,我想通过将其打包到一个可运行的.jar中进行部署,并仅使用main方法及其依赖项所需要的最低限度。我的工作区中也有几个软件包,但是不需要将它们包含在生成的.jar文件中。当我尝试导出时,它清楚地表明所需的库将在其中,而且其他独立软件包也在其中。 (使用“导出”选项时,情况完全相同)我选择仅导出com.proj…