如何为Maven添加额外的源目录以进行编译并将其包含在构建jar中?


95

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


一个简单的问题:为什么不将源代码移动到src / main / java?或创建一个单独的包含代码的Maven项目/模块,并将其定义为依赖项。
khmarbaise12年

7
就我而言,我需要添加一个生成的sources文件夹,我希望将其放置在target内。
djjeck

另外,人们可能希望将集成的测试中比其他目录中src/{main,test}/所讲述这里
2000年,shubham

这里也对此进行了讨论:stackoverflow.com/q/270445/1061929
bjmi

Answers:


143

您可以使用Build Helper插件,例如:

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>build-helper-maven-plugin</artifactId>
        <version>1.7</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>

1
eclipse是否真的将这样的文件夹识别buildpath为任何人的文件夹之一?'因为它不适合我。FWIW,我m2e用来导入项目。
mystarrocks 2014年

很好的答案,只是为了澄清,您应该使用上面的代码行替换您的maven-compiler-plugin ...
Colin 2014年

也可以在IntelliJ中使用。
亚历山大·克里姆采切克

1
Eclipse要求我为m2e(构建帮助器连接器)安装一个插件。我做到了,生命周期错误消失了。
亚历克西斯·杜弗洛尼

1
Plugin execution not covered by lifecycle configuration: org.codehaus.mojo:build-helper-maven-plugin:1.7:add-source (execution: add-source, phase: generate-sources)收到此错误
Katie

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

更新pom.xml为-

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

2
NetBeans像魅力一样捡起它:)
Attila

1
看来您确实需要删除Eclipse构建路径上添加的文件夹的**排除项:(
Dormouse 2014年

@Dormouse您能解释一下吗?
塞卡特2014年

1
不适用于IntelliJ,它将显示<resource>为“ Resource”文件夹,而不显示为“ Source”文件夹,例如,它将不会在其中编译Java源文件。
亚历山大·克里姆采切克

4
此解决方案只会将Java源文件移至target / classes目录,而不会编译源文件
Stefan Haberl,


1

在最新的Maven版本(3)和最新版本的maven编译器插件(3.7.0)中,我注意到,build-helper-maven-plugin如果包含要添加到构建中的源代码的文件夹位于,则不需要添加带有的源文件夹。target文件夹或其子文件夹。
看来,编译器maven插件可以编译位于此文件夹内的所有Java源代码,无论包含它们的目录是什么。
例如具有某些(生成或无)在源代码中target/atarget/generated-source/foo将被编译并在输出目录加入:target/classes


-1

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

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

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


2
为什么对人投反对票?基本上与saiky0的答案相同(已投票),但更早吗?
Friso

15
@Friso,因为它不正确。添加资源目录将添加资源(复制到target/classes,但未编译的文件)。这个问题是关于添加源目录的,该目录包含将被编译target/classes而不是被复制的文件。
达斯Android
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.