由于项目的需求,我们系统的部署分两步走,第一,吧项目中,java文件按照不同的类型,进行分类打包(jar包的形式);
接着在吧所有的资源文件,包括打包好的jar包,已war包的形式发布出来。
在这过程中就遇到一个问题,由于系统中所有的包都打成jar包的形式了,那么,在war保重的WEB-INF/classess中,就不应该有系统的class了,因为所有class都已jar
包的形式出包了嘛。
那么首先是吧系统中的java文件,打成jar包,这个是用maven的maven-jar-plugin插件轻易做到,pom.xml文件预语法如下:
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<excludes>**/com/**</excludes>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<executions>
<execution>
<id>spi-jar</id>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<classifier>spi-${project.version}</classifier>
<jarName>scheduling</jarName>
<includes>
<include>**/spi/**</include>
</includes>
</configuration>
</execution>
<execution>
<id>core-jar</id>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<classifier>core-${project.version}</classifier>
<jarName>scheduling</jarName>
<excludes>
<exclude>**/spi/**</exclude>
</excludes>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
这个pom文件中支出了两个打包任务,分别是:<id> spi.jar </id>和任务 <id>core-jar</id>,其中,第一个任务是将src/main/java中的 <include>**/spi/**</include> ,也就是spi下目录下的所有文件打包成一个jar包,命名为:scheduling-spi-版本号.jar包的形式。
第二个任务是吧除了<exclude>**/spi/**</exclude>,也就是spi目录的其他目录,都打成另外一个jar包,命名成 scheduling-core-版本号.jar包的形式。
这个两个jar包打完之后,是为后面服务的,以后,将会把这两个jar包放到将来项目打出的war包中的WEB-INF/lib下面,作为依赖。其中,scheduling-spi包还支持发布给第三方进行开发作为依赖使用。
对于 scheduling-core.jar包中的内容,不发布出去,对第三方不可见。
jar包打包完成之后,接下来就进行war包的打包,war包的打包,可以使用maven-war-plugin插件作为打包,然后由于所有java代码实际上已经编译过了,不需要再编译放到war包的classes下面了,所以,在打包的时候,需要将class文件排除在外,pom文件编写如下:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<excludes>**/com/**</excludes>
</configuration>
</plugin>
可以看到,在打包war包的时候,会将所有com目录下的文件排除出外,打包之后,war包中将不会包含class文件。
系统的目录结构如下:
打包之后的效果如下:
简单的例子而已。