有没有一种方法可以在一个maven项目中编译多个java源目录?


当前回答

虽然来自evokk的答案基本上是正确的,但它缺少测试类。 你必须使用goal add-test-source添加测试类:

<execution>
    <phase>generate-sources</phase>
    <goals>
        <goal>add-test-source</goal>
    </goals>
    <configuration>
       <sources>
            <source>target/generated/some-test-classes</source>
        </sources>
    </configuration>
</execution>

其他回答

这适用于maven 3.5.4,现在Intellij Idea将此代码视为源代码:

<plugin>
     <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-compiler-plugin</artifactId>
     <version>3.3</version>
     <configuration>
         <generatedSourcesDirectory>src/main/generated</generatedSourcesDirectory>                    
     </configuration>
</plugin>

虽然来自evokk的答案基本上是正确的,但它缺少测试类。 你必须使用goal add-test-source添加测试类:

<execution>
    <phase>generate-sources</phase>
    <goals>
        <goal>add-test-source</goal>
    </goals>
    <configuration>
       <sources>
            <source>target/generated/some-test-classes</source>
        </sources>
    </configuration>
</execution>

这可以分两步完成:

对于每个源目录,您应该创建自己的模块。 在所有模块中,您应该指定相同的构建目录:${build.directory}

如果你使用已启动的Jetty (Jetty:run),那么重新编译任何模块中的任何类(使用Maven、IDEA或Eclipse)都会导致Jetty重新启动。对于修改后的资源,您将获得相同的行为。

这对我很有效

<build>
    <sourceDirectory>.</sourceDirectory>
    <plugins>
        <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
        <includes>
            <include>src/main/java/**/*.java</include>
            <include>src/main2/java/**/*.java</include>
        </includes>
        </configuration>
        </plugin>
    </plugins>
</build>

通过定义资源标记,这也适用于maven。您可以为src文件夹命名任何您喜欢的名称。

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

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

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