ChatGPT解决这个技术问题 Extra ChatGPT

如何为 maven 添加额外的源目录以编译并包含在构建 jar 中?

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

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

t
t0r0X

您可以使用 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 是否真的将这样的文件夹识别为任何人的buildpath之一?因为它不适合我。 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) 收到此错误
S
Saikat

注意:此解决方案只会将 java 源文件移动到 target/classes 目录,不会编译源。

将 pom.xml 更新为 -

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

NetBeans 把它捡起来就像一个魅力 :)
似乎您确实需要删除 Eclipse 构建路径上添加的文件夹的 ** 排除项:(
@Dormouse 你能解释一下吗?
不适用于 IntelliJ,它会将 <resource> 视为“Resource”文件夹而不是“Source”文件夹,例如它不会编译其中的 Java 源文件。
此解决方案只会将 java 源文件移动到 target/classes 目录,不会编译源
C
Community

http://maven.apache.org/guides/mini/guide-using-one-source-directory.html

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

也见

Maven compile with multiple src directories


这会覆盖默认的 src/main/java 目录。如果您想要多个目录,则还必须指定默认目录。
问题是如何添加多个源目录,而您提出了一种仅添加一个源目录的方法,这与所要求的相反。
d
davidxxx

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


A
Arun

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

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

src/main/java 是默认路径,不需要在 pom.xml 中提及


为什么投反对票的人?基本上与saiky0的答案相同(有赞成票)但更早?
@Friso,因为它不正确。添加资源目录将添加资源(文件复制到 target/classes,但未编译)。这个问题是关于添加一个源目录,其中包含将被编译target/classes 中的文件,而不是复制的。