2016-08-03 4 views
1

Ich habe folgendes Plugin in meinem pom.xml, die für die Erstellung von anderen Projekten Java-Dateien erzeugen, benötigt sollte:Maven-antrun-Plugin: erzeugen Quellen für protobuf keine Java-Dateien erzeugen

<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> 

jedoch erzeugt dies unter src-gen-ordner überhaupt nichts. Und dann halte ich Fehler immer wie:

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

und

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 

im Grunde kann es nicht die benötigten Dateien finden, natürlich und gibt Fehler. Ich habe die Version 2.5.0 bereits installiert, und die Abhängigkeit ist korrekt definiert:

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

Ich habe keine Ideen mehr. Was macht das wirklich nicht?

EDIT: Im Folgenden nahm meine Aufmerksamkeit in der Debug-Ausgabe von 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

Willst du damit sagen, dass das 'maven-antrun-plugin' überhaupt nicht aufgerufen wird? Oder es wird aufgerufen, aber 'protoc 'wird nicht aufgerufen oder erzeugt die Dateien nicht? Kannst du die Logs, die sich auf 'maven-antrun-plugin' beziehen, mit' -X' ablegen? – Tunaki

+0

Es wird aufgerufen, ich kann '[exec] Executing 'Protokoll mit Argumenten sehen: [exec]' --java_out = src-gen'' und solche Zeilen in der Debug-Ausgabe. Lassen Sie mich die relevanten Sachen unter der Frage teilen. EDIT: nur die Debug-Ausgabe hinzugefügt. –

+0

Können Sie versuchen mit '--java_out = $ {basedir}/src-gen' (d. H. Einen absoluten Pfad angeben)? – Tunaki

Antwort

1

Wenn Zweifeln über Dateien nicht erstellt bekommen, stellen Sie sicher, dass Sie absoluten Pfad verwenden. In diesem Fall erlaubt ${basedir} uns den absoluten Pfad zu dem Ort des Maven-Basisverzeichnis (Standort von POM) zu erhalten:

<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> 

Dann beachten Sie, dass die <sourceRoot> Parameter des maven-antrun-plugin veraltet:

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

Wie empfohlen, sollten Sie das Ziel build-helper-maven-plugin:add-source verwenden, um einen Quellordner zu Ihrem Maven-Projekt hinzuzufügen. Konfigurieren Sie die hinzuzufügenden Ordner mit dem Parameter sources dieses Ziels.


auch sagen, dass Sie eine bessere Chance, mit dem org.xolstice.maven.plugins:protobuf-maven-plugin, anstatt sich auf Ant Aufgaben haben könnten:

die Java-Quelldateien verwendet werden können

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.

Das compile Ziel zu erzeugen. Platziert Ihre .proto Dateien unter src/main/proto (konfigurierbar mit dem protoSourceRoot Parameter), erzeugt das Plugin die Java Quelldateien innerhalb ${project.build.directory}/generated-sources/protobuf/java (konfigurierbar mit dem outputDirectory Parameter). Wenn die ausführbare Datei protoc nicht in der Umgebungsvariablen PATH enthalten ist, können Sie sie mit dem Parameter protocExecutable festlegen.