我一直在尝试将protobuf类型google.protobuf.Timestamp
与protoc-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…