如何在Maven中正确包含Java源代码?

时间:2012-01-04 16:23:33

标签: maven gwt

我正在研究一个非常简单的Java博客引擎,以学习多种技术。

Tech:Spring IoC,Hibernate,jUnit,GWT和Maven。

我创建了两个Maven项目:一个核心项目和一个GWT项目(对核心项目有一个参考)

可在https://github.com/LaurentT/BlogEngineCore

访问代码

我的目标如下:我想要包含Java源代码和XML,因为我的GWT项目需要Java源代码将其编译成JavaScript。

我尝试在<build>元素中使用以下代码:

     <resources>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.java</include>
            </includes>
        </resource>
        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>**/*.*xml</include>
                <include>**/*.*properties</include>
            </includes>
        </resource>
    </resources>

我的jUnit测试用于在添加之前传递和完成,但现在他们甚至没有完成它们正在悬挂......

我不知道发生了什么,所以我想知道是否有其他方法可以包含Java源代码,或者我是否只是做错了。

有任何线索吗?

4 个答案:

答案 0 :(得分:21)

更干净的maven方式是附加一个单独的源jar。

有一些标准方法可以在您的构建using the maven source plugin中生成它:

 
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-source-plugin</artifactId>
  <version>2.2.1</version>
  <executions>
    <execution>
      <id>attach-sources</id>
      <phase>verify</phase>
      <goals>
        <goal>jar-no-fork</goal>
      </goals>
    </execution>
  </executions>
</plugin>

除了您的核心项目jar之外,您的GWT项目现在可以引用您的核心项目源:

 
<dependency>
  <groupId>your.project</groupId>
  <artifactId>core</artifactId>
  <version>the.same.version</version>
  <classifier>sources</classifier>
  <scope>provided</scope><!-- use for compilation only -->
</dependency>

答案 1 :(得分:11)

尝试在目录路径前面加上$ {basedir}。

 
<resource>
    <directory>${basedir}/src/main/java</directory>
</resource>

答案 2 :(得分:3)

您可以找到如何为多模块项目here设置maven。

* gwt.xml文件在哪里?

如果显示的标记是 core 项目的pom.xml文件的一部分,那么您还应添加<include>**/*.gwt.xml</include>

 
<resource>
        <directory>src/main/java</directory>
        <includes>
            <include>**/*.java</include>
            <include>**/*.gwt.xml</include>
        </includes>
</resource>

答案 3 :(得分:0)

与其他答案相比,我的方法复制了所有*.gwt.xml模块描述符,只复制了模块描述符中实际指定的java源文件。您也不需要在POM和模块描述符中重复自己。

用以下内容更新您的pom:

    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>gwt-maven-plugin</artifactId>
            <version>2.7.0</version>
            <executions>
                <execution>
                    <goals>
                        <goal>resources</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>

和您的* .gwt.xml

<?xml version="1.0" encoding="UTF-8"?>
<module>

    <!-- Specify the paths for translatable code -->
    <source path='shared' />

</module>

org:codehaus.mojo:gwt-maven-plugin docs

  

GWT:资​​源
  描述:将GWT java源代码和模块描述符复制为构建outputDirectory中的资源。替代在POM中声明<resource>并进行更精细的过滤,因为读取模块描述符以检测要复制的源。   实施:org.codehaus.mojo.gwt.GwtResourcesMojo
  语言:java
  绑定到阶段:进程资源