- 如何使用不规范的目录结构
maven的标准目录如下
而自己的工程的目录却是另外一种标准,原先采用maven编译并不想改变工程的目录结构
根据上面的工程可以看出有几个重要的目录
- src源码的存放位置
- resources的存放位置
- test源码的存放位置
- webapp文件的位置
分别对应的配置如下
src:
<sourceDirectory>src</sourceDirectory>
resources:
<resources>
<resource>
<directory>src</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
</resources>
test:
<testSourceDirectory>test</testSourceDirectory>
<testOutputDirectory>target/test-classes</testOutputDirectory>
<testResources>
<testResource>
<directory>test</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</testResource>
</testResources>
webapp
这里必须使用到war包的plugin,且修改webapp的源路径
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version> 2.1.1 </version>
<configuration>
<webappDirectory>target/${artifactId}</webappDirectory>
<warSourceDirectory>WebContent</warSourceDirectory>
</configuration>
</plugin>
- 如何在打包时忽略某目录的文件
在编译war包时,由于webapp使用的是自定义路径,maven在发布war包时,会将web-inf/lib下的所有文件copy到war包中去,这样与mvn从localRepository中根据pom.xml文件配置得到的jar混在一起,很容易出现问题。此时,应该在maven-war-plugin中增加如下配置:
<warSourceExcludes>WEB-INF/lib/**</warSourceExcludes>
表示忽略copy到target/artifact_id目录中时忽略WEB-INF/lib/下的所有文件
另外有个配置
<packagingExcludes>
表示忽略从target/artifact_id目录打成war包时忽略的目录或文件
在配置warSourceExcludes出现了一个问题,打成war包时所有的jar文件都没有了。后来发现是maven-war-plugin的bug,将版本号改为2.2.1即可
- 如何增加第二个src源码路径
有时候我们的工程会自定义与src目录平级的源码路径,这时我们需要采用另外一种plugin
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.4</version>
<executions>
<execution>
<id>add-source</id>
<phase>generate-sources</phase>
<goals>
<goal>add-source</goal>
</goals>
<configuration>
<sources>
<source>${basedir}/SecondSrcDir</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
注意配置中红色的SecondSrcDir