2016-08-03 11 views
1

I持つ他のプロジェクトのコンパイルに必要なJavaファイルを生成することになっている私のpom.xmlで、次のプラグインは、:しかしのmaven-antrun - プラグイン:Javaファイルを生成しませんいるProtobufのソースを生成

<plugin> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <version>3.2</version> 
    <configuration> 
     <source>${jdk.version}</source> 
     <target>${jdk.version}</target> 
    </configuration> 
</plugin> 
<plugin> 
    <groupId>org.apache.felix</groupId> 
    <artifactId>maven-bundle-plugin</artifactId> 
    <extensions>true</extensions> 
    <configuration> 
     <archive> 
      <manifestFile>META-INF/MANIFEST.MF</manifestFile> 
     </archive> 
    </configuration> 
</plugin> 
<plugin> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <executions> 
     <execution> 
      <id>generate-sources</id> 
      <phase>generate-sources</phase> 
      <configuration> 
       <tasks> 
        <mkdir dir="src-gen" /> 
        <exec executable="protoc"> 
         <arg value="--java_out=src-gen" /> 
         <arg value="proto/ros/RosTime.proto" /> 
         <arg value="proto/ros/RosHeader.proto" /> 
         <arg value="proto/ros/RosPoint.proto" /> 
         <arg value="proto/ros/RosPose.proto" /> 
         <arg value="proto/ros/RosPoseStamped.proto" /> 
         <arg value="proto/ros/RosQuaternion.proto" /> 
         <arg value="proto/U.proto" /> 
         <arg value="proto/S.proto" /> 
         <arg value="proto/Z.proto" /> 
         <arg value="proto/algorithm/A.proto" /> 
         <arg value="proto/algorithm/B.proto" /> 
         <arg value="proto/algorithm/C.proto" /> 
         <arg value="proto/algorithm/D.proto" /> 
         <arg value="proto/algorithm/E.proto" /> 
         <arg value="proto/algorithm/F.proto" /> 
         <arg value="proto/env/G.proto" /> 
         <arg value="proto/env/H.proto" /> 
         <arg value="proto/env/J.proto" /> 
         <arg value="proto/env/K.proto" /> 
         <arg value="proto/env/L.proto" /> 
        </exec> 
       </tasks> 
       <sourceRoot>src-gen</sourceRoot> 
      </configuration> 
      <goals> 
       <goal>run</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

をこれはsrc-genフォルダの下に何も生成しません。そして私は、次のようなエラーを得続ける:

cannot find symbol 
[ERROR] symbol: class AMsg 
[ERROR] location: class project.messages.AFormatter 

package project.messages.ros.RosHeader does not exist 
package project.messages.ros.RosPoint does not exist 
package project.messages.ros.RosPose does not exist 
package project.messages.ros.RosPoseStamped does not 

は基本的に、それは当然、必要なファイルを見つけることができず、エラーになります。私は2.5.0バージョンがすでにインストールされている、との依存関係が正しく定義されています

<dependency> 
    <groupId>com.google.protobuf</groupId> 
    <artifactId>protobuf-java</artifactId> 
    <version>2.5.0</version> 
</dependency> 

は、私がアイデアを使い果たしました。本当にこれが機能しないのは何ですか?

EDIT:以下はmvn install -Xのデバッグ出力に私の注意を取った:

Execute:Java13CommandLauncher: Executing 'protoc' with arguments: 

'--java_out=src-gen' 
'proto/ros/RosTime.proto' 
'proto/ros/RosHeader.proto' 
'proto/ros/RosPoint.proto' 
'proto/ros/RosPose.proto' 
'proto/ros/RosPoseStamped.proto' 
'proto/ros/RosQuaternion.proto' 
. 
. 
. 
. 
The ' characters around the executable and arguments are 
not part of the command. 
    [exec] ros/RosTime.proto: File not found. 
    [exec] proto/ros/RosHeader.proto: Import "ros/RosTime.proto" was not found or had errors. 
    [exec] proto/ros/RosHeader.proto:6:14: "project.messages.ros.RosTimeMsg" seems to be defined in "proto/ros/RosTime.proto", which is not imported by "proto/ros/RosHeader.proto". To use it here, please add the necessary import. 
    . 
    . 
    . 
    [INFO] --- maven-antrun-plugin:1.3:run (generate-sources) @ X.messages --- 
[DEBUG] org.apache.maven.plugins:maven-antrun-plugin:jar:1.3: 
[DEBUG] org.apache.maven:maven-plugin-api:jar:2.0.4:compile 
[DEBUG] org.apache.maven:maven-project:jar:2.0.4:compile 
[DEBUG]  org.apache.maven:maven-settings:jar:2.0.4:compile 
[DEBUG]  org.apache.maven:maven-profile:jar:2.0.4:compile 
[DEBUG]  org.apache.maven:maven-model:jar:2.0.4:compile 
[DEBUG]  org.apache.maven:maven-artifact-manager:jar:2.0.4:compile 
[DEBUG]   org.apache.maven:maven-repository-metadata:jar:2.0.4:compile 
[DEBUG]  org.codehaus.plexus:plexus-container-default:jar:1.0-alpha-9:compile 
[DEBUG]   junit:junit:jar:3.8.1:compile 
[DEBUG]   classworlds:classworlds:jar:1.1-alpha-2:compile 
[DEBUG] org.apache.maven:maven-artifact:jar:2.0.4:compile 
[DEBUG] org.codehaus.plexus:plexus-utils:jar:1.5.6:compile 
[DEBUG] org.apache.ant:ant-launcher:jar:1.7.1:runtime 
[DEBUG] org.apache.ant:ant:jar:1.7.1:compile 
[DEBUG] Created new class realm plugin>org.apache.maven.plugins:maven-antrun-plugin:1.3 
[DEBUG] Importing foreign packages into class realm plugin>org.apache.maven.plugins:maven-antrun-plugin:1.3 
[DEBUG] Imported: < project>runtime_shared:art.util.robot:1.0.0 
[DEBUG] Populating class realm plugin>org.apache.maven.plugins:maven-antrun-plugin:1.3 
[DEBUG] Included: org.apache.maven.plugins:maven-antrun-plugin:jar:1.3 
[DEBUG] Included: junit:junit:jar:3.8.1 
[DEBUG] Included: org.codehaus.plexus:plexus-utils:jar:1.5.6 
[DEBUG] Included: org.apache.ant:ant-launcher:jar:1.7.1 
[DEBUG] Included: org.apache.ant:ant:jar:1.7.1 
[DEBUG] Excluded: org.apache.maven:maven-plugin-api:jar:2.0.4 
[DEBUG] Excluded: org.apache.maven:maven-project:jar:2.0.4 
[DEBUG] Excluded: org.apache.maven:maven-settings:jar:2.0.4 
[DEBUG] Excluded: org.apache.maven:maven-profile:jar:2.0.4 
[DEBUG] Excluded: org.apache.maven:maven-model:jar:2.0.4 
[DEBUG] Excluded: org.apache.maven:maven-artifact-manager:jar:2.0.4 
[DEBUG] Excluded: org.apache.maven:maven-repository-metadata:jar:2.0.4 
[DEBUG] Excluded: org.codehaus.plexus:plexus-container-default:jar:1.0-alpha-9 
[DEBUG] Excluded: classworlds:classworlds:jar:1.1-alpha-2 
[DEBUG] Excluded: org.apache.maven:maven-artifact:jar:2.0.4 
[DEBUG] Configuring mojo org.apache.maven.plugins:maven-antrun-plugin:1.3:run from plugin realm ClassRealm[plugin>org.apache.maven.plugins:maven-antrun-plugin:1.3, parent: [email protected]] 
[DEBUG] Configuring mojo 'org.apache.maven.plugins:maven-antrun-plugin:1.3:run' with override configurator --> 
[DEBUG] (f) pluginArtifacts = [org.apache.maven.plugins:maven-antrun-plugin:maven-plugin:1.3:, junit:junit:jar:3.8.1:compile, org.codehaus.plexus:plexus-utils:jar:1.5.6:compile, org.apache.ant:ant-launcher:jar:1.7.1:runtime, org.apache.ant:ant:jar:1.7.1:compile] 
[DEBUG] (f) project = MavenProject: runtime_X:X.messages:1.0.0 @ /home/usr/workspace_runtime_X/X.messages/pom.xml 
[DEBUG] (f) sourceRoot = /home/usr/workspace_runtime_X/X.messages/src-gen 
[DEBUG] (f) tasks = 
[DEBUG] -- end configuration -- 
+0

あなたは 'のmaven-antrun-Plugin'を、すべてで呼び出されていないことを言っていますか?または、 'protoc'が呼び出されていないか、ファイルを生成していませんか?あなたは '-X'を実行したときに、'のmaven-antrun-Plugin'をに関連するログを投稿することができますか? [EXEC]「--java_out = SRC-gen''およびデバッグ出力にこのような行: – Tunaki

+0

は、それが呼び出され、私は '[EXEC]引数を持つ 'protoc' を実行を見ることができます。私は質問の下で関連するものを共有しましょう。 EDIT:デバッグ出力を追加しました。 –

+0

あなたは '--java_out = $ {BASEDIR}/SRC-gen'(すなわち、絶対パスを指定する)としてみてくださいことはできますか? – Tunaki

答えて

1

作成され得ていないファイルについての疑いで、あなたは絶対パスを使用します。そして、

<mkdir dir="${basedir}/src-gen" /> 
<exec executable="protoc"> 
    <arg value="--java_out=${basedir}/src-gen" /> 
    <arg value="--proto_path=${basedir}" /> <!-- proto_path needs to point to where the proto files are --> 
    <arg value="proto/ros/RosTime.proto" /> 
    <!-- rest of proto files... --> 
</exec> 

maven-antrun-plugin<sourceRoot>パラメータが廃止されていることに注意:この場合、${basedir}は、私たちはMavenのベースディレクトリ(POMの位置)の位置の絶対パスを取得することができ

Deprecated. Use the build-helper-maven-plugin to bind source directories

推奨されているように、あなたはあなたのMavenプロジェクトにソースフォルダを追加するbuild-helper-maven-plugin:add-source目標を使用する必要があります。そのゴールのsourcesパラメータで追加するフォルダを設定します。

Maven Protocol Buffers Plugin uses Protocol Buffer Compiler (protoc) tool to generate Java source files from .proto (protocol buffer definition) files for the specified project.

compile目標は、Javaソースファイルを生成するために使用することができます。


あなたがorg.xolstice.maven.plugins:protobuf-maven-pluginを使用しての代わりに、Antタスクに依存する良いチャンスがあるかもしれない、と述べました。 src/main/protoprotoSourceRootパラメータで設定)の下であなたの.protoファイルを配置する、プラグインは(outputDirectoryパラメータで設定)${project.build.directory}/generated-sources/protobuf/java内部のJavaソース・ファイルを生成します。

protoc実行ファイルがPATH環境変数にない場合は、protocExecutableパラメータで設定できます。

関連する問題