【问题标题】:How to add an extra source directory for maven to compile and include in the build jar?如何为 maven 添加额外的源目录以编译并包含在构建 jar 中?
【发布时间】:2012-04-02 22:09:25
【问题描述】:

除了 src/main/java 之外,我还添加了一个 src/bootstrap 目录,我想将它包含在我的构建过程中,换句话说,我希望 maven 编译并将源代码包含在我的构建中。怎么样!?

【问题讨论】:

  • 简单问题:为什么不将源代码移动到 src/main/java ?或者创建一个单独的 maven 项目/模块,其中包含代码并将其定义为依赖项。
  • 在我的情况下,我需要添加一个生成的源文件夹,我更喜欢驻留在目标内。
  • 或者,人们可能希望将 integration-tests 放置在 src/{main,test}/ 以外的目录中,如 here 所述
  • 这也在这里讨论过:stackoverflow.com/q/270445/1061929

标签: java maven maven-2


【解决方案1】:

您可以使用Build Helper Plugin,例如:

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

【讨论】:

  • Eclipse 是否真的将这样的文件夹识别为任何人的buildpaths 之一?因为它不适合我。 FWIW,我使用m2e 导入项目。
  • 很好的答案,只是为了澄清,你应该用上面的行替换你的 maven-compiler-plugin...
  • 也适用于 IntelliJ。
  • Eclipse 要求我为 m2e 安装一个插件,即构建助手连接器。我做到了,生命周期错误消失了。
  • Plugin execution not covered by lifecycle configuration: org.codehaus.mojo:build-helper-maven-plugin:1.7:add-source (execution: add-source, phase: generate-sources) 收到此错误
【解决方案2】:
注意:此解决方案只会将 java 源文件移动到 target/classes 目录,不会编译源代码。

pom.xml 更新为 -

<project>   
 ....
    <build>
      <resources>
        <resource>
          <directory>src/main/config</directory>
        </resource>
      </resources>
     ...
    </build>
...
</project>

【讨论】:

  • NetBeans 把它捡起来了 :)
  • 看来您确实需要删除 Eclipse 构建路径上添加的文件夹的 ** 排除项:(
  • @Dormouse 你能解释一下吗?
  • 不适用于 IntelliJ,它会将&lt;resource&gt; 视为“资源”文件夹,而不是“源”文件夹,例如它不会编译其中的 Java 源文件。
  • 此解决方案只会将 java 源文件移动到 target/classes 目录,并且不会编译
【解决方案3】:

【讨论】:

  • 这会覆盖默认的 src/main/java 目录。如果你想要多个目录,你也必须指定默认目录。
  • 问题是如何添加多个源目录,而您提出了一种只添加一个源目录的方法,这与所要求的相反。
【解决方案4】:

对于最新的 Maven 版本 (3) 和最新版本的 maven 编译器插件 (3.7.0),我注意到如果包含要添加的源代码的文件夹,则不需要添加带有 build-helper-maven-plugin 的源文件夹该版本位于target 文件夹或其子文件夹中。
似乎编译器 maven 插件会编译位于此文件夹内的任何 java 源代码,无论包含它们的目录是什么。
例如,在target/atarget/generated-source/foo 中有一些(生成或没有)源代码将被编译并添加到 outputDirectory 中:target/classes

【讨论】:

    【解决方案5】:

    您可以为构建过程添加目录,例如:

        ...
       <resources>
         <resource>
           <directory>src/bootstrap</directory>
         </resource>
       </resources>
       ...
    

    src/main/java 为默认路径,pom.xml 中无需提及

    【讨论】:

    • 为什么投反对票的人?与 saiky0 的答案基本相同(有赞成票)但更早?
    • @Friso 因为它不正确。添加资源目录将添加资源(文件复制到target/classes,但未编译)。这个问题是关于添加一个源目录,其中包含将被编译target/classes而不是复制的文件。
    猜你喜欢
    • 2011-08-29
    • 1970-01-01
    • 2014-01-26
    • 1970-01-01
    • 2020-03-02
    • 2014-02-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多