在本地机器搭建一个开源项目的源码环境时,把其转换为maven项目,因模块业务划分,不同的业务放在不同的源目录下,这样转换出来的maven项目结构如下:

061e5b8730aafb66ef3932db97de2bf7.png

pom.xml内容如下:

4.0.0sokeepersokeeper3.4.6sokeepersokeepertargetlog4jlog4j1.2.16.....

在使用过程中发现,在eclipse中可以正常使用,但使用mvn compile命令进行编译的时候,target/classes目录下始终没有编译后的*.class文件。查看maven执行日志发现有一行日志如下:

Nothing to compile - all classes are up to date

后经验证发现,所有在src/main/java目录下的代码,都会被编译成功。而在src/java/main、src/java/generated源目录下的代码不会被编译。这时,才忽然想起maven项目的默认项目结构是这样的:

957e66d3b03c5c629c6d4692a72384a1.png

然后,才想明白为啥出现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的默认源代码、资源文件、测试源代码目录配置可以修改配置:

src/main/java src/test/javasrc/main/resourcessrc/test/resources

但只能指定一个源代码目录,不能指定多个,继续查找,又发现了一个插件build-helper-maven-plugin。发现这个插件可以指定多个源代码目录、多个资源目录,这个插件就可以实现我的需求。用法如下:

org.codehaus.mojobuild-helper-maven-plugin1.8add-sourcegenerate-sourcesadd-sourcesrc/java/mainsrc/java/generated

配置好build-helper-maven-plugin插件后,在eclipse中右键项目,maven->update project configuration。

85abc693b25873c90319bebc89cfb3fc.png

这样当前项目中的src/java/main、src/java/generated不再单单是eclipse认识的源代码目录,还是maven的源代码目录。maven再执行编译时,就会到src/java/main、src/java/generated、src/main/java目录下去编译java文件。如此,便解决了问题。

另介绍几种maven插件的配置

org.codehaus.mojobuild-helper-maven-plugin1.8add-sourcegenerate-sourcesadd-sourcesrc/java/mainsrc/java/generatedorg.apache.maven.pluginsmaven-compiler-plugin3.01.61.6UTF8org.apache.maven.pluginsmaven-resources-plugin2.6UTF-8org.apache.maven.pluginsmaven-source-plugin2.1.1attach-sourcesjar-no-forkorg.apache.maven.pluginsmaven-jar-plugin2.4org/make-a-jarcompilejarorg.apache.maven.pluginsmaven-assembly-plugin2.4assembly.xmlmake-assemblypackagesingle

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐