2015-02-15 2 views
0

Я пытаюсь перенести проект Java на основе Maven, который использует JavaCC для Scala. Я рад оставить JavaCC сгенерированные классы на Java по крайней мере на данный момент. Однако сгенерированный класс JavaCC зависит от преобразованных классов.Портирование Java-проекта Maven, использующего JavaCC для Scala

Проект строится отлично от исходных источников Java, но если я заменю их источниками Scala, Maven сначала пытается скомпилировать JavaCC сгенерированный класс и не видит и символов, предоставленных новым кодом.

Проблема заключается в том, как заставить Maven генерировать Java-код, а затем скомпилировать код Scala и сгенерированный код вместе, чтобы компилятор мог найти все зависимости. Решение похоже на добавление магического заклинания к pom.xml. Что это должно быть?

Мой текущий pom.xml является:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>bobj</groupId> 
    <artifactId>bobj</artifactId> 
    <version>0.9</version> 
    <packaging>jar</packaging> 

    <name>BOBJ algebraic specification and verification system</name> 
    <url>http://github.com/fh-wedel/BOBJ</url> 

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 

    <profiles> 
     <profile> 
      <id>scala-2.10</id> 
      <properties> 
       <scalaVersion>2.10.4</scalaVersion> 
       <scalaBinaryVersion>2.10</scalaBinaryVersion> 
      </properties> 
      <dependencies> 
       <dependency> 
        <groupId>org.scala-lang</groupId> 
        <artifactId>scala-library</artifactId> 
        <version>${scalaVersion}</version> 
       </dependency> 
       <dependency> 
        <groupId>org.scala-lang</groupId> 
        <artifactId>scala-swing</artifactId> 
        <version>${scalaVersion}</version> 
       </dependency> 
      </dependencies> 
     </profile> 
    </profiles> 

    <build> 
     <sourceDirectory>src/main/java</sourceDirectory> 
     <plugins> 
      <plugin> 
       <artifactId>maven-jar-plugin</artifactId> 
       <version>2.4</version> 
       <configuration> 
        <archive> 
         <manifest> 
          <mainClass>bobj.BOBJ</mainClass> 
         </manifest> 
        </archive> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>javacc-maven-plugin</artifactId> 
       <version>2.6</version> 
       <executions> 
        <execution> 
         <id>javacc</id> 
         <goals> 
          <goal>javacc</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <configuration> 
        <source>1.6</source> 
        <target>1.6</target> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>net.alchim31.maven</groupId> 
       <artifactId>scala-maven-plugin</artifactId> 
       <version>3.1.6</version> 
       <executions> 
        <execution> 
         <goals> 
          <goal>compile</goal> 
          <goal>testCompile</goal> 
         </goals> 
        </execution> 
       </executions> 
       <configuration> 
        <args> 
         <!-- work-around for https://issues.scala-lang.org/browse/SI-8358 --> 
         <arg>-nobootcp</arg> 
        </args> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>build-helper-maven-plugin</artifactId> 
       <version>1.9.1</version> 
       <executions> 
        <execution> 
         <id>add-source</id> 
         <phase>generate-sources</phase> 
         <goals> 
          <goal>add-source</goal> 
         </goals> 
         <configuration> 
          <sources> 
           <source>src/main/scala</source> 
           <source>src/main/javacc</source> 
          </sources> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 

    <dependencies> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>4.8.2</version> 
      <scope>test</scope> 
     </dependency> 
    </dependencies> 
</project> 

Я не пишу это. Я начал с pom.xml, который пришел с проектом, и добавил части для scala и build-helper-maven-plugin , которые я скопировал из других источников. Мой Maven-fu минимален, поэтому я не удивлюсь, если я сделаю что-то глубоко ошибочное.

+1

Вы можете иметь их в качестве подпроектов ? Вы можете указать порядок сборки через это. – Koshinae

ответ

0

Оказывается, я забыл настроить scala-maven-plugin декларацию для mixed scala java project

т.е. scala-maven-plugin потребности

  <executions> 
       <execution> 
        <id>scala-process-resources</id> 
        <phase>process-resources</phase> 
        <goals> 
         <goal>add-source</goal> 
         <goal>compile</goal> 
        </goals> 
       </execution> 
       <execution> 
        <id>scala-process-test-resources</id> 
        <phase>process-test-resources</phase> 
        <goals> 
         <goal>testCompile</goal> 
        </goals> 
       </execution> 
      </executions> 

вместо обычного

  <executions> 
       <execution> 
        <goals> 
         <goal>compile</goal> 
         <goal>testCompile</goal> 
        </goals> 
       </execution> 
      </executions> 
+0

Вы можете «принять» свой ответ .... –

 Смежные вопросы

  • Нет связанных вопросов^_^