为多语言项目配置Maven源目录

时间:2012-01-02 00:27:47

标签: java maven clojure

我有一个Maven项目(在Eclipse中使用m2eclipse插件),它包含两种不同语言的代码(Java和Clojure)。

理想情况下,我想为两种语言分别使用两个源文件夹:

  • 的src /主/ JAVA
  • 的src /主/ CLJ

Eclipse很高兴在项目中定义了两个源目录。但是,据我所知,Maven只支持单个源目录,如下所示:

<build>
  ....
  <sourceDirectory>src/main/java</sourceDirectory>
  ....
</build>

如果我将第二个sourceDirectory添加到pom.xml,我会收到错误.....

是否有推荐的方法在Maven中配置这种多语言项目?

4 个答案:

答案 0 :(得分:4)

我不相信你需要这样做; Clojure插件应该已经知道如何找到Clojure源代码(虽然IIRC默认为src / main / clojure)。

有关详细信息,请参阅here

答案 1 :(得分:2)

点是,sourceDirectory适用于Java。大多数情况下,至少。 Clojure源目录取决于您使用的插件;例如https://github.com/talios/clojure-maven-plugin使用以下子标记:

<configuration>
  <sourceDirectories>
    <sourceDirectory>src/main/clojure</sourceDirectory>
  </sourceDirectories>
  <testSourceDirectories>
    <testSourceDirectory>src/test/clojure</testSourceDirectory>
  </testSourceDirectories>
</configuration>

这些是默认值,因此如果您使用clojure而不是clj,那么您应该没有配置就可以了。

答案 2 :(得分:1)

Build Helper Maven Plugin允许您添加其他源目录。

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>build-helper-maven-plugin</artifactId>
        <version>1.7</version>
        <executions>
          <execution>
            <id>add-source</id>
            <phase>generate-sources</phase>
            <goals>
              <goal>add-source</goal>
            </goals>
            <configuration>
              <sources>
                <source>src/main/clj</source>
              </sources>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>

答案 3 :(得分:1)

好的,我找到了一个合理的方法来完成这项工作:诀窍是将您的Clojure源目录分类为Maven中的资源目录。这样,.clj文件就像你期望的那样包含在生成的.jar中。

pom.xml的相关部分:

<build>
        ....
        <sourceDirectory>src/main/java</sourceDirectory>

        <resources>
            <resource>
                <directory>src/main/clojure</directory>
            </resource>
        </resources>

        <testResources>
            <testResource>
                <directory>src/test/clojure</directory>
            </testResource>
        </testResources>
</build>