Maven使用多个src目录编译

sal*_*sal 185 java maven-2

有没有办法在单个maven项目中编译多个java源目录?

小智 269

您可以使用build-helper添加新的源目录:

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>build-helper-maven-plugin</artifactId>
            <executions>
                <execution>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>add-source</goal>
                    </goals>
                    <configuration>
                        <sources>
                            <source>src/main/generated</source>
                        </sources>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
Run Code Online (Sandbox Code Playgroud)

  • 只是给别人的注释(比如我),'plugin`元素在`/ project/build/plugins`而不在`/ project/build/pluginManagement/plugins` (16认同)
  • 因此,做到这一点的最佳方法是在2017年创建XML意大利面。没有人看到有问题吗? (4认同)
  • 如果你正在使用eclipse,你可能想从eclipse marketplace安装`m2e connector for build-helper-maven-plugin`来删除pom.xml中的错误 (3认同)
  • 这种方法的唯一问题是最终工件也包括java源文件(.java文件)。有没有一种方法可以排除源文件,仅包含.class文件? (2认同)

com*_*ome 49

我天真地这样做:

<build>
  <finalName>osmwse</finalName>
  <sourceDirectory>src/main/java, src/interfaces, src/services</sourceDirectory>
</build>
Run Code Online (Sandbox Code Playgroud)

  • 在Maven 3.3.9中没有为我工作. (18认同)
  • 对于 maven 3.8.1 不起作用。另外,在这个版本的maven的文档中,没有任何地方写到标签&lt;sourceDirectory&gt;中可以有这样的内容。--- maven-compiler-plugin:3.8.1:compile (default-compile) @ xxx-xxx --- 没有要编译的源 (4认同)
  • 对我来说,这导致 Maven 3.2.2 找不到任何来源。 (3认同)
  • 为我工作:)但Eclipse似乎并不喜欢它.它似乎认为"src/main/java,src/interfaces"是一个单独的src,因此将其标记为(缺失). (2认同)

sal*_*sal 37

这对我有用

<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>
Run Code Online (Sandbox Code Playgroud)

  • 恕我直言不是一个好主意,因为几个插件假设`sourceDirectory` - 可能还有其他`来源` - 作为源文件的根源.在您的解决方案中,`maven-compiler-plugin`是唯一知道这些实际根的插件. (18认同)
  • 这不会将其添加到项目模型中,因此在IDE中无法正常工作. (5认同)
  • @Laurent你是对的.这是几年前的一个好主意,但现在有更好的选择.上面列出的build-helper是我的首选选项. (3认同)

小智 15

为了使它在intelliJ中工作,你也可以添加

<generatedSourcesDirectory>src/main/generated</generatedSourcesDirectory>
Run Code Online (Sandbox Code Playgroud)

到maven-compiler-plugin

  • 不过,该路径似乎是由注释处理器生成的源。即使可行,某些插件也可能以不同的方式处理此路径。例如,我希望运行“ clean”时可以删除此目录。 (2认同)
  • 你把它放在哪里? (2认同)

sen*_*982 9

这也可以通过定义资源标记与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>
Run Code Online (Sandbox Code Playgroud)

  • http://maven.apache.org/pom.html#Resources - >`资源不是(通常)代码.他们没有编译 (8认同)

Mak*_*iuk 7

这适用于 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>
Run Code Online (Sandbox Code Playgroud)