Maven 项目打成可执行Jar 包或者War包

随着 Maven 使用的越来越多,我们希望Maven 将java项目打包。下面介绍几种方式:

第一种,在pom.xml 中添加打包插件。

<plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-shade-plugin</artifactId>
      <version>3.0.0</version>
           <executions>
              <execution>
                  <phase>package</phase>
                  <goals>
                      <goal>shade</goal>
                   </goals>
                   <configuration>
                       <transformers>
                        <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                               <mainClass>com.xattit.provider.RunMain</mainClass>
                        </transformer>
                           <!--  解决spring 项目的xml 文件找不到问题 -->
                           <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                               <resource>META-INF/spring.handlers</resource>
                           </transformer>
                           <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                               <resource>META-INF/spring.schemas</resource>
                           </transformer>
                       </transformers>
                       <filters> <!-- 排除掉一些无用的文件 -->
                            <filter>
                                <artifact>*:*</artifact>
                                <excludes>
                                     <exclude>META-INF/*.SF</exclude>
                                     <exclude>META-INF/*.DSA</exclude>
                                     <exclude>META-INF/*.RSA</exclude>
                                </excludes>
                            </filter>
                       </filters>
                    </configuration>
              </execution>
    </executions>
</plugin>

注:打包插件其实就是个jar 包。具体版本可以到Maven repository 查找。两位为了生成可执行文件,需要证明程序运行的入口--mainClass。

我是在项目工作空间下运行mvn package 命令【清空命令 mvn clean】,截图:


运行结果截图如下:


在项目工作空间target 目录下生成有两个jar包。其中xxx-SNAPSHOT.jar 就是包含项目依赖包的可执行文件。另外一个不是。

在DOS下运行 java -jar xxx.jar,即可执行。

以下两种生成jar 包的方式与第一种相同。

方式2:在pom.xml 中添加打包插件

<plugin>  
            <groupId>org.apache.maven.plugins</groupId>  
            <artifactId>maven-assembly-plugin</artifactId>  
            <version>2.6</version>  
            <configuration>  
                <archive>  
                    <manifest>  
                        <mainClass>com.ttit.provider.Main</mainClass>  
                    </manifest>  
                </archive>  
                <descriptorRefs>  
                    <descriptorRef>jar-with-dependencies</descriptorRef>  
                </descriptorRefs>  
            </configuration>
             <executions>  
                <execution>  
                    <id>make-assembly</id>  
                    <phase>package</phase>  
                    <goals>  
                        <goal>single</goal>  
                    </goals>  
                </execution>  
            </executions>    
        </plugin>

就先介绍着两种生成jar 包的方式。这两种方式参照微博:转载原文

======================================================================

对于java web 项目可以生成可执行过war包,即在DOS下运行java -jar xx.war 即可执行web项目。

【这里有个前提,项目中嵌入jetty自启动类,也就是写好程序jetty的启动入口。用jetty做容器加载web项目】

原理与上述相似,在pom.xml 中添加生成war 的插件:

<build>
		<finalName>TestWeb</finalName>
		<plugins>
			<plugin>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>2.3.2</version>
				<configuration>
					<source>1.6</source>
					<target>1.6</target>
				</configuration>
			</plugin>
			<plugin>
				<artifactId>maven-war-plugin</artifactId>
				<version>2.2</version>
				<configuration>
					<version>3.0</version>
					<failOnMissingWebXml>false</failOnMissingWebXml>
				</configuration>
			</plugin>
			<!-- 引入打包插件 -->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-antrun-plugin</artifactId>
				<version>1.7</version>
				<executions>
					<execution>
						<id>main-class-placement</id>
						<phase>prepare-package</phase>
						<configuration>
							<tasks>
								<copy todir="${project.build.directory}/${project.artifactId}/">
									<fileset dir="${project.build.directory}/classes/">
										<include name="**/*/Main2.class" />
									</fileset>
								</copy>
							</tasks>
						</configuration>
						<goals>
							<goal>run</goal>
						</goals>
					</execution>
				</executions>
			</plugin>

			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-shade-plugin</artifactId>
				<version>2.1</version>
				<executions>
					<execution>
						<phase>package</phase>
						<goals>
							<goal>shade</goal>
						</goals>
						<configuration>
							<createDependencyReducedPom>false</createDependencyReducedPom>
							<transformers>
								<transformer
									implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
									<mainClass>com.phda.test.Main2</mainClass>
								</transformer>
							</transformers>
							<artifactSet>
								<includes>
									<include>org.eclipse.jetty:*</include>
									<include>*:javax.servlet*</include>
									<include>org.glassfish:javax.el*</include>
								</includes>
							</artifactSet>
							<filters>
								<filter>
									<artifact>*:*</artifact>
									<excludes>
										<exclude>META-INF/*.SF</exclude>
										<exclude>META-INF/*.DSA</exclude>
										<exclude>META-INF/*.RSA</exclude>
									</excludes>
								</filter>
							</filters>
						</configuration>
					</execution>
				</executions>
			</plugin>
			<plugin>
				<artifactId>maven-assembly-plugin</artifactId>
				<version>3.1.0</version>
				<configuration>
					<descriptors> <!--描述文件路径 -->
						<descriptor>src/main/resources/assembly/assembly.xml</descriptor>
					</descriptors>
				</configuration>
				<executions>
					<execution>
						<id>make-assembly</id> <!-- this is used for inheritance merges -->
						<phase>package</phase> <!-- bind to the packaging phase -->
						<goals>
							<goal>single</goal>
						</goals>
					</execution>
				</executions>
			</plugin>

		</plugins>
	</build>

有几点需要说明:

1.网上有许多maven web项目生成可执行war 包的方法。前提是在项目添加web 自启动类,多数估计使用的jetty。

2.上面贴出的是整个build 。这种方式中需要用到配置文件assembly.xml 代码在下面;需要执行可执行类:mainClass;标红的地方要根据实际项目情况而定。

3.我仍然实在项目工作空间下运行mvn package 获得war 包。war 包生成在target 目录下。

assembly.xml 内容如下:

<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.0.0 http://maven.apache.org/xsd/assembly-2.0.0.xsd">
    <id>standalone</id>
    <formats>
        <format>zip</format>
    </formats>
    <dependencySets>
    </dependencySets>
    <files>
        <file>
            <source>target/${project.artifactId}.war</source>
            <outputDirectory>\</outputDirectory>
        </file>
    </files>
    <fileSets>
        <fileSet>
            <directory>src\main\assembly\bin</directory>
            <outputDirectory>\bin</outputDirectory>
            <includes>
                <include>start.sh</include>
            </includes>
            <fileMode>0755</fileMode>
            <lineEnding>unix</lineEnding>
        </fileSet>
        <fileSet>
            <directory>src\main\assembly\bin</directory>
            <outputDirectory>\bin</outputDirectory>
            <includes>
                <include>start.bat</include>
            </includes>
        </fileSet>
    </fileSets>
</assembly>


  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值