`
阅读更多

提出问题:

           使用maven打包非常的方便,那么如何进行war和jar的打包呢?

解决方案:

      一、打war包

          1. 使用maven打war包非常的简单,只需要maven install即可。

          2.指定jdk版本:

<!-- 指定编译器1.6;原因是行里WAS只支持JDK1.6 -->
<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-compiler-plugin</artifactId>
	<version>3.1</version>
	<configuration>
		<source>1.6</source>
		<target>1.6</target>
	</configuration>
</plugin>

         二、打jar包,

          1. 打可执行jar包,我们更加喜欢将第三方jar打在一起,如下:

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.3</version>
<configuration>
	<createDependencyReducedPom>false</createDependencyReducedPom>
</configuration>
<executions>
	<execution>
		<phase>package</phase>
		<goals>
			<goal>shade</goal>
		</goals>
		<configuration>
			<transformers>
				<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
					<mainClass>com.web.java.ftptar.YadaTimer</mainClass>
				</transformer>
			</transformers>
		</configuration>
	</execution>
</executions>
</plugin>

         2. 上面的插件很方便的打一个可执行jar包,但是如果包含配置文件,我们又希望配置文件放在外面,如下:

<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>2.4.3</version>
                <configuration>
                    <createDependencyReducedPom>false</createDependencyReducedPom>
                </configuration>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <transformers>
                                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <mainClass>com.web.java.ftptar.YadaTimer</mainClass>
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <version>2.5</version>
                <executions>
                    <execution>
                        <id>copy-resources</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-resources</goal>
                        </goals>
                        <configuration>
                            <encoding>UTF-8</encoding>
                            <!--被编译过的应用程序class文件存放的目录。-->
                            <outputDirectory>${project.build.directory}/etc</outputDirectory>
                            <resources>
                                <!--这个元素描述了项目相关或测试相关的所有资源路径-->
                                <resource>
                                    <!--描述存放资源的目录,该路径相对POM路径-->
                                    <directory>src/main/resources/</directory>
                                    <!--包含的模式列表,例如**/*.xml.-->
                                    <includes>
                                        <exclude>**/*.properties</exclude>
                                        <exclude>**/*.xml</exclude>
                                        <exclude>**/*.bat</exclude>
                                    </includes>
                                    <!--是否使用参数值代替参数名。参数值取自properties元素或者文件里配置的属性,文件在filters元素里列出。-->
                                    <filtering>true</filtering>
                                </resource>
                            </resources>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <!-- Jar 插件包含建立Jar文件的目标 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>2.4</version>
                <!-- The configuration of the plugin -->
                <configuration>
                    <!-- Configuration of the archiver -->
                    <archive>
                        <!-- 生成的jar中,不要包含pom.xml和pom.properties这两个文件 -->
                        <addMavenDescriptor>false</addMavenDescriptor>

                        <!-- Manifest specific configuration -->
                        <manifest>
                            <!-- 是否要把第三方jar放到manifest的classpath中 -->
                            <addClasspath>true</addClasspath>
                            <!-- 生成的manifest中classpath的前缀,因为要把第三方jar放到lib目录下,所以classpath的前缀是lib/ -->
                            <classpathPrefix>/</classpathPrefix>
                            <!-- 应用的main class -->
                            <mainClass>com.web.java.ftptar.YadaTimer</mainClass>
                        </manifest>
                        <!-- 用maven在MANIFEST.MF资料中的Class-Path中增加当前目录(.)  -->
                        <manifestEntries>
                            <Class-Path>.</Class-Path>
                        </manifestEntries>
                    </archive>
                    <!--排除的模式列表,例如**/*.xml-->
                    <excludes>
                        <exclude>**/*.properties</exclude>
                        <exclude>**/*.xml</exclude>
                        <exclude>**/*.bat</exclude>
                    </excludes>
                </configuration>
            </plugin>
            <!--plugin元素包含描述插件所需要的信息。-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <!--Compiler 插件包含编译源代码和单元测试代码的目标-->
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.3</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                    <!-- “编码 GBK 的不可映射字符”问题的解决 -->
                    <encoding>utf-8</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>

         3. 打可执行jar包,如果包含多个模块,我们想把依赖jar放在lib文件夹下,如下:

<!--构建项目需要的信息-->
    <build>

        <!--使用的插件列表 。-->
        <plugins>

            <!--plugin元素包含描述插件所需要的信息。-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <!--Compiler 插件包含编译源代码和单元测试代码的目标-->
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.3</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                    <!-- “编码 GBK 的不可映射字符”问题的解决 -->
                    <encoding>utf-8</encoding>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <includes>
                        <!--不写匹配默认规则,TestSuit结尾,test开头的方法  -->
                        <include>**/*TestSuit.java</include>   <!-- 两个星号**用来匹配任意路径,一个星号*用来获取除路径风格符外的0个或多个字符 -->
                    </includes>
                    <excludes>
                        <exclude>**/CollectionBillTestCase.java</exclude>
                        <exclude>**/PaymentBillTestCase.java</exclude>
                    </excludes>
                    <skip>false</skip>  <!-- 略过单元测试 -->
                    <testFailureIgnore>true</testFailureIgnore> <!-- 当Maven 遇到一个测试失败,它默认的行为是停止当前的构建。 如果你希望继续构建项目,即使 Surefire 插件遇到了失败的单元测试,你就需要设置 Surefire 的testFailureIgnore 这个配置属性为 true -->
                </configuration>
            </plugin>

            <!--scala 插件编译scala源代码的目标-->
            <plugin>
                <groupId>org.scala-tools</groupId>
                <artifactId>maven-scala-plugin</artifactId>
                <version>2.15.2</version>
                <!--在构建生命周期中执行一组目标的配置。每个目标可能有不同的配置。-->
                <executions>
                    <!--execution元素包含了插件执行需要的信息-->
                    <execution>
                        <!--配置的执行目标-->
                        <goals>
                            <goal>compile</goal>
                            <goal>testCompile</goal>
                        </goals>
                    </execution>
                </executions>
                <!--作为DOM对象的配置-->
                <configuration>
                    <args>
                        <arg>-feature</arg>
                    </args>
                </configuration>
            </plugin>
            <!-- Jar 插件包含建立Jar文件的目标 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>2.4</version>
                <!-- The configuration of the plugin -->
                <configuration>
                    <!-- Configuration of the archiver -->
                    <archive>
                        <!-- 生成的jar中,不要包含pom.xml和pom.properties这两个文件 -->
                        <addMavenDescriptor>false</addMavenDescriptor>

                        <!-- Manifest specific configuration -->
                        <manifest>
                            <!-- 是否要把第三方jar放到manifest的classpath中 -->
                            <addClasspath>true</addClasspath>
                            <!-- 生成的manifest中classpath的前缀,因为要把第三方jar放到lib目录下,所以classpath的前缀是lib/ -->
                            <classpathPrefix>lib/</classpathPrefix>
                            <!-- 应用的main class -->
                            <mainClass>com.bjyada.rps.appmain.RpsApp</mainClass>
                        </manifest>
                        <!-- 用maven在MANIFEST.MF资料中的Class-Path中增加当前目录(.)  -->
                        <manifestEntries>
                            <Class-Path>.</Class-Path>
                        </manifestEntries>
                    </archive>
                    <!--排除的模式列表,例如**/*.xml-->
                    <excludes>
                        <exclude>**/*.properties</exclude>
                        <exclude>**/*.xml</exclude>
                    </excludes>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <version>2.5</version>
                <executions>
                    <execution>
                        <id>copy-resources</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-resources</goal>
                        </goals>
                        <configuration>
                            <encoding>UTF-8</encoding>
                            <!--被编译过的应用程序class文件存放的目录。-->
                            <outputDirectory>${project.build.directory}/etc</outputDirectory>
                            <resources>
                                <!--这个元素描述了项目相关或测试相关的所有资源路径-->
                                <resource>
                                    <!--描述存放资源的目录,该路径相对POM路径-->
                                    <directory>src/main/resources/</directory>
                                    <!--包含的模式列表,例如**/*.xml.-->
                                    <includes>
                                        <exclude>**/*.properties</exclude>
                                        <exclude>**/*.xml</exclude>
                                    </includes>
                                    <!--是否使用参数值代替参数名。参数值取自properties元素或者文件里配置的属性,文件在filters元素里列出。-->
                                    <filtering>true</filtering>
                                </resource>
                            </resources>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

            <!-- 把依赖的jar包拷到lib目录下 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <!--在构建生命周期中执行一组目标的配置。每个目标可能有不同的配置。-->
                <executions>
                    <!--execution元素包含了插件执行需要的信息-->
                    <execution>
                        <!--执行目标的标识符,用于标识构建过程中的目标,或者匹配继承过程中需要合并的执行目标-->
                        <id>copy-dependencies</id>
                        <!--绑定了目标的构建生命周期阶段,如果省略,目标会被绑定到源数据里配置的默认阶段-->
                        <phase>package</phase>
                        <!--配置的执行目标-->
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <!--被编译过的应用程序class文件存放的目录。-->
                            <outputDirectory>
                                ${project.build.directory}/etc/lib
                            </outputDirectory>
                            <overWriteReleases>false</overWriteReleases>
                            <overWriteSnapshots>false</overWriteSnapshots>
                            <overWriteIfNewer>true</overWriteIfNewer>
                            <excludeArtifactIds>junit</excludeArtifactIds>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

        </plugins>
    </build>

   注意: 如果用exe4j打包,出现配置文件路径错误问题,看看.class.getClassLoader().getResource

   后记:只做记录,供以后查询方便。欢迎访客一起交流。

 

 

 

分享到:
评论

相关推荐

    maven打包出错解决办法,亲测绝对可以!

    本篇文章将详细阐述如何解决Maven打包出错的问题,并分享一些关于搭建Maven私服的知识。 一、Maven打包出错常见原因及解决办法 1. **依赖冲突**:当项目中的多个库引用了不同版本的同一个依赖时,可能导致冲突。...

    Maven打包,指定classes路径

    以上就是关于"Maven打包,指定classes路径"的知识点,主要涉及到Maven的资源配置和插件定制。理解并掌握这些配置可以帮助开发者更高效地管理和构建Java Web应用。同时,记得在实际项目中根据实际情况调整`pom.xml`,...

    sprintboot maven 打包分离lib jar 资源文件 properties xml yml

    sprintboot maven 打包分离lib jar 资源文件 properties xml yml 详细信息查看我的博客 https://mp.csdn.net/postedit/80274087 java -jar -cp 启动

    如何用IntelliJ IDEA新建web项目,用maven打包成.jar

    idea新建maven web项目.zip Jetbrains IntelliJ IDEA创建基于maven打包工具的WEB网站项目 本项目使用的是SSM框架spring mvc,spring, mybatis.用maven打包成jar

    maven打包 maven打jar包详细步骤

    本文将详细讲解如何使用Maven来打包一个Java项目,并创建JAR文件。 首先,Maven有三个主要生命周期阶段:`clean`、`default`(也称为`compile`)和`install`。每个阶段包含一系列的阶段(或者称为目标,如`compile`...

    spring 扫描jar maven 打包

    2. **Maven打包过程** Maven是一个强大的项目管理工具,它可以帮助开发者编译、测试、打包、部署Java应用。在Maven中,打包(package)目标是用来创建项目的最终输出,如JAR或WAR文件。默认的打包类型取决于项目的`...

    springboot实现maven打包加载不同环境的方式二

    当前案例中包含一整套的代码和word文档,非常适合新手... 主要是通过maven打包加载不同环境的properties文件 然后将对于的属性绑定到指定的实体对象中;然后通过调用接口可以看到加载不同环境控制台打印的内容是不一样的

    jasperreport maven打包后找不到字体解决方案

    jasperreport 用maven打包后找不到字体解决方案 net.sf.jasperreports.engine.JRRuntimeException: Could not load the following font

    maven 打包 部署到tomcat 删除的jar包

    ### Maven打包过程中的依赖管理 Maven是一个非常强大的自动化构建工具,它能够帮助开发者高效地完成项目的构建、测试、打包等一系列工作。当使用Maven进行项目打包时,会根据项目的`pom.xml`文件中定义的依赖关系...

    maven打包使用yui压缩css和js文件

    在命令行中,我们可以通过运行 `mvn clean package` 命令来触发Maven生命周期,这将清理旧的构建产物,编译源代码,并最终打包项目。在这个过程中,YUI Compressor会自动对指定的CSS和JS文件进行压缩。 4. **检查...

    maven 过滤文件夹打包

    至于压缩包子文件的文件名称列表"package-folder",这可能是指Maven打包后的结果,即生成了一个名为`package`的文件夹。这个文件夹通常包含了项目的所有依赖、资源文件以及打包后的主应用程序。在Maven的默认配置中...

    maven打包源码

    在深入探讨“maven打包源码”的主题之前,我们首先需要理解Maven作为一个项目管理和综合工具,是如何在软件开发流程中扮演着至关重要的角色。Maven通过提供一个强大的框架来管理构建过程,使得项目的构建、依赖关系...

    Maven打包实战.zip

    本压缩包文件“Maven打包实战.zip”提供了关于Maven打包的实战教程,配合文章《Maven打包实战》(链接已提供)学习,将有助于深入理解Maven的打包流程。 首先,我们需要理解Maven的生命周期。Maven生命周期包括三个...

    springboot+maven打包demo【将依赖与配置文件打包到jar包外部】

    在本文中,我们将深入探讨如何使用Spring Boot和Maven来构建一个项目,使得依赖和配置文件被打包到jar包外部,以实现更加灵活的项目管理。这个方法对于那些需要根据不同环境进行定制配置或者频繁更新配置的应用来说...

    maven打包dubbo服务接口(maven-assembly-plugin)

    Maven作为项目管理和构建工具,可以帮助我们自动化构建、打包和依赖管理。本篇文章将详细探讨如何使用Maven的`maven-assembly-plugin`插件来打包Dubbo服务接口。 首先,我们要理解Maven的生命周期和构建过程。Maven...

    maven打包程序和依赖分离

    org.apache.maven.plugins maven-jar-plugin true lib/ xx.xx.xx.xx &lt;!-- 分离配置文件 *.** */*.xml

    Maven自动升级版本号并打包上传的脚本

    3. Maven打包: `mvn package`命令会将源代码编译、测试并打包成指定格式(如JAR或WAR)。如果配置了`&lt;build&gt;&lt;finalName&gt;yourArtifactId&lt;/finalName&gt;&lt;/build&gt;`,那么生成的文件名将会是`yourArtifactId-1.0.0-...

    eclipse maven 打包bundle

    由于未提供具体的博客内容,以上信息是基于常规的OSGi和Maven打包流程给出的通用指导。 总的来说,Eclipse与Maven结合使用可以简化OSGi bundle的开发和打包过程,使得管理依赖和构建流程变得更加高效和自动化。在...

    Java+IDEA+maven混淆打包

    1. **配置Maven打包**: 在`pom.xml`文件中,我们需要添加`maven-jar-plugin`插件来打包Java项目。以下是一个基本的配置示例: ```xml &lt;groupId&gt;org.apache.maven.plugins &lt;artifactId&gt;maven-jar-plugin ...

    maven打包

    【标题】:“Maven打包” 在软件开发领域,Maven是一个强大的项目管理和综合工具,尤其在Java开发中广泛使用。它通过使用一个统一的构建生命周期和依赖管理来简化项目的构建、管理和部署过程。Maven的核心理念是...

Global site tag (gtag.js) - Google Analytics