Maven加入新的source问题

    最近将之前做的hadoop-raid移植到2.4.0上面,因为之前的RPC都是通过POJO,而现在2.x的RPC都是通过PB(参见我之前写过的Blog),所以需要将新加入的Protocol进行PB的改写。

    其中写好proto文件后,需要用hadoop写好的hadoop-maven-plugin插件将proto文件生成java文件。

 <plugin>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-maven-plugins</artifactId>
        <executions>
          <execution>
            <id>compile-protoc-raid</id>
            <phase>generate-sources</phase>
            <goals>
              <goal>protoc</goal>
            </goals>
            <configuration>
              <protocVersion>${protobuf.version}</protocVersion>
              <protocCommand>${protoc.path}</protocCommand>
              <imports>
                <param>${basedir}/../../hadoop-common-project/hadoop-common/src/main/proto</param>
                <param>${basedir}/src/main/proto</param>
              </imports>
              <source>
                <directory>${basedir}/src/main/proto</directory>
                <includes>
                  <include>RaidProtocol.proto</include>
                </includes>
              </source>
              <output>${project.build.directory}/generated-sources/java</output>
            </configuration>
          </execution>
        </executions>
      </plugin>

    同时需要将生成的java文件加入ClassPath中,采用的是org.codehaus.mojo.build-helper-maven-plugin插件。

      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>build-helper-maven-plugin</artifactId>
        <executions>
          <execution>
            <id>add-raid-generated-sources-directory</id>
            <phase>generate-sources</phase>
            <goals>
              <goal>add-source</goal>
            </goals>
            <configuration>
              <sources>
                <source>${project.build.directory}/generated-sources/java</source>
              </sources>
            </configuration>
          </execution>
        </executions>
      </plugin>

    但是使用后能够在terminal中顺利编译,而eclipse却显示没有加入这个classpath。

    最后想到还是用maven命令生成一遍,mvn clean generate-sources eclipse:eclipse

就解决问题了。

Print Friendly

jiang yu

Leave a Reply