Maven配置多源代码目录、多资源目录
在本地机器搭建一个开源项目的源码环境时,把其转换为maven项目,因模块业务划分,不同的业务放在不同的源目录下,这样转换出来的maven项目结构如下:
pom.xml内容如下:
在使用过程中发现,在eclipse中可以正常使用,但使用mvn compile命令进行编译的时候,target/classes目录下始终没有编译后的*.class文件。查看maven执行日志发现有一行日志如下:
1 | < div id="mCSB_2" class="mCustomScrollBox mCS-minimal-dark mCSB_vertical_horizontal mCSB_outside" style="max-height: none;" tabindex="0">< div id="mCSB_2_container" class="mCSB_container mCS_y_hidden mCS_no_scrollbar_y mCS_x_hidden mCS_no_scrollbar_x" style="position: relative; top: 0px; left: 0px; width: 100%;" dir="ltr">< code-pre class="code-pre" id="pre-nfz3P3">< code-line class="line-numbers-rows"></ code-line >Nothing to compile - all classes are up to date</ code-pre ></ div ></ div >< div id="mCSB_2_scrollbar_vertical" class="mCSB_scrollTools mCSB_2_scrollbar mCS-minimal-dark mCSB_scrollTools_vertical" style="display: none;">< div class="mCSB_draggerContainer">< div id="mCSB_2_dragger_vertical" class="mCSB_dragger" style="position: absolute; min-height: 0px; height: 0px; top: 0px;">< div class="mCSB_dragger_bar" style="line-height: 0px;"></ div ></ div >< div class="mCSB_draggerRail"></ div ></ div ></ div >< div id="mCSB_2_scrollbar_horizontal" class="mCSB_scrollTools mCSB_2_scrollbar mCS-minimal-dark mCSB_scrollTools_horizontal" style="display: none;">< div class="mCSB_draggerContainer">< div id="mCSB_2_dragger_horizontal" class="mCSB_dragger" style="position: absolute; min-width: 0px; width: 0px; left: 0px;">< div class="mCSB_dragger_bar"></ div ></ div >< div class="mCSB_draggerRail"></ div ></ div ></ div > |
后经验证发现,所有在src/main/java目录下的代码,都会被编译成功。而在src/java/main、src/java/generated源目录下的代码不会被编译。这时,才忽然想起maven项目的默认项目结构是这样的:
然后,才想明白为啥出现eclipse中可以编译,使用mvn compile不能正常编译。原来,在创建maven项目后,我把代码拷贝到了src/java/main目录下,并把src/java/main目录作为了源代码目录(Source Code Folder),这样eclipse的自动编译项目功能,就会自动编译所有源代码目录下的java文件(同理src/java/generated)。而使用maven命令时,maven项目默认以src/main/java为源代码目录,会把src/main/java这个目录下的所有java文件进行编译,其它的源代码目录下的java文件,则不会被maven编译。
既然已经知道问题出现在这里,就可以寻思解决方案了。要么,可以直接把src/java/main、src/java/generated目录下的java代码都移到maven默认的源代码目录src/main/java下;要么,让maven在执行编译命令的时候,也去编译src/java/main、src/java/generated目录的java文件。
从网上搜索资料,发现maven的默认源代码、资源文件、测试源代码目录配置可以修改配置:
但<sourceDirectory>只能指定一个源代码目录,不能指定多个,继续查找,又发现了一个插件build-helper-maven-plugin。发现这个插件可以指定多个源代码目录、多个资源目录,这个插件就可以实现我的需求。用法如下:
配置好build-helper-maven-plugin插件后,在eclipse中右键项目,maven->update project configuration。
这样当前项目中的src/java/main、src/java/generated不再单单是eclipse认识的源代码目录,还是maven的源代码目录。maven再执行编译时,就会到src/java/main、src/java/generated、src/main/java目录下去编译java文件。如此,便解决了问题。
另介绍几种maven插件的配置<build> <plugins>