maven将jsp打入jar中

首先说明一下,为何jsp打入jar中仍能运行。

    在Servlet3.0协议规范中指出:${jar}/META-INF/resources/被视为根目录。那么将jsp等静态资源打入META-INF/resources/目录下就与实际项目没有区别了。

   在打jar的时候会自动生成META-INF目录,该目录的作用是:配置应用程序、扩展程序、类加载器和服务、manifest.mf文件。

   maven打jar的时候会自动读取src/main/java和src/main/resources下的资源打成jar,那么我们可以利用这一机制将META-INF/resources目录放在src/main/resources资源文件夹下,再将需要打包的静态资源发到META-INF/resources目录下即可。


下面展示一个将jsp打入jar的例子。

1.module4项目是一个war项目,它依赖于module2项目,配置如下:

<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.my.module</groupId>
    <artifactId>ModuleTest</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  <artifactId>module4</artifactId>
  <packaging>war</packaging>
  <name>module4 Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>com.my.module</groupId>
      <artifactId>module2</artifactId>
      <version>0.0.1-SNAPSHOT</version>
    </dependency>
  </dependencies>
  <build>
    <finalName>module4</finalName>
    <plugins>
			<!-- 定义编译版本为1.7,字符编码为utf8 -->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>2.0.2</version>
				<configuration>
					<source>1.7</source>
					<target>1.7</target>
					<encoding>UTF-8</encoding>
				</configuration>
			</plugin>

			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-war-plugin</artifactId>
				<version>2.6</version>
				<configuration>
					<webappDirectory>src/main/webapp</webappDirectory>
				</configuration>
			</plugin>
		</plugins>
  </build>
</project>


2.module4项目的jsp文件放在WEB-INF下,如图:

maven将jsp打入jar中_第1张图片


3.module2是一个jar项目,module2依赖于module1项目,pom.xml如下:

<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.my.module</groupId>
    <artifactId>ModuleTest</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  <artifactId>module2</artifactId>
  <name>module2 Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>com.my.module</groupId>
      <artifactId>module1</artifactId>
      <version>0.0.1-SNAPSHOT</version>
    </dependency>
  </dependencies>
  <build>
    <finalName>module2</finalName>
    <plugins>
			<!-- 定义编译版本为1.7,字符编码为utf8 -->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>2.0.2</version>
				<configuration>
					<source>1.7</source>
					<target>1.7</target>
					<encoding>UTF-8</encoding>
				</configuration>
			</plugin>
		</plugins>
  </build>
</project>


4.module2的jsp文件目录如下:

maven将jsp打入jar中_第2张图片


5.编译module2项目的结果如下:(可以发现jsp被打包带入了jar中)

maven将jsp打入jar中_第3张图片


6.启动项目访问module2.jsp结果如下:

maven将jsp打入jar中_第4张图片


7.注意:maven默认情况下是不会去jar中扫描action的,这需要我们手动在struts中配置哪些action的jar需要被扫描。

maven将jsp打入jar中_第5张图片


你可能感兴趣的:(maven,jsp,打入jar,引用jar中的action)