Maven打包jar项目

  默认情况下,使用maven打包的jar项目(执行maven install)不会包含其他包引用,要想打包为带其他项目引用的jar,需要加入插件

  要得到一个可以直接在命令行通过java命令运行的JAR文件,还要满足两个条件:
  1、JAR包中的/META-INF/MANIFEST.MF元数据文件必须包含Main-Class信息。

  2、项目的依赖包也要合并在打的jar包中,即项目所有的依赖都必须在Classpath中

  有多种插件可以完成这个任务:

  1、这种方式需要使用mvn package命令来执行

<plugin>
<!--         打包为jar,goal为package -->
            <artifactId>maven-assembly-plugin</artifactId>
            <configuration>
                <appendAssemblyId>false</appendAssemblyId>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
                <archive>
                    <manifest>
                        <mainClass>com.guangshan.framework.App</mainClass>
                    </manifest>
                </archive>
            </configuration>
            <executions>
                <execution>
                    <id>make-assembly</id>
                    <phase>package</phase>
                    <goals>
                        <goal>assembly</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

  默认命令为mvn assembly:assembly,加了executions之后添加了一些其他命令

  2、maven-shade-plugin,它可以让用户配置Main-Class的值,然后在打包的时候将值填入/META-INF/MANIFEST.MF文件。关于项目的依赖,它很聪明地将依赖JAR文件全部解压后,再将得到的.class文件连同当前项目的.class文件一起合并到最终的CLI包中,这样,在执行CLI JAR文件的时候,所有需要的类就都在Classpath中了。

  同样是mvn package

 <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-shade-plugin</artifactId>
           <version>1.2.1</version>
           <executions>
                      <execution>
               <phase>package</phase>
               <goals>
                     <goal>shade</goal>
               </goals>
               <configuration>
                     <transformers>
                       <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                        <mainClass>hello.SayHello</mainClass>
                      </transformer>
                     </transformers>
               </configuration>
                </execution>
           </executions>
        </plugin>

  3、稍微复杂一点

  默认情况下,maven的默认打包:

  对应于同样的package生命周期阶段,Maven为jar项目调用了maven-jar-plugin,为war项目调用了maven-war-plugin,换言之,packaging直接影响Maven的构建生命周期。了解这一点非常重要,特别是当你需要自定义打包行为的时候,你就必须知道去配置哪个插件。

  maven-war-plugin可以读取Eclipse项目的配置,所以直接打的包就包含了其他的包引用(Deployment Assembly设置里面)

  maven-jar-plugin则不会包含引用的包,所以需要使用插件把依赖包打进来。

  Web 工程的输出发布包没什么好说的,因为 <packaging>war</packaging>,所以 mvn package 出来的 WAR 包里就有站点运行的所有内容了,用到的依赖会在 WEB-INF/lib 目录下列着。

  而对于那些 <packaging>jar</packaging> 的工程,用 mvn package 只会生成一个 JAR 包,它所依赖的各个类库仍然分散在本地仓库中,而我们的发布包应该包含这些第三方依赖的。

  在pom.xml中添加jar和dependency插件

<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>2.4</version>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <classpathPrefix>lib/</classpathPrefix>
                            <mainClass>cc.unmi.Main</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <id>copy-dependencies</id>
                        <phase>pre-package</phase>
                        <goals>
                            <goal>copy</goal>
                        </goals>
                        <configuration>
                            <artifactItems>
                                <artifactItem>
                                    <groupId>com.jcraft</groupId>
                                    <artifactId>jsch</artifactId>
                                    <version>0.1.50</version>
                                    <outputDirectory>${project.build.directory}/lib</outputDirectory>
                                    <overWrite>true</overWrite>
                                </artifactItem>
                                <artifactItem>
                                    <groupId>commons-cli</groupId>
                                    <artifactId>commons-cli</artifactId>
                                    <version>1.3-SNAPSHOT</version>
                                    <outputDirectory>${project.build.directory}/lib</outputDirectory>
                                    <overWrite>true</overWrite>
                                </artifactItem>
                            </artifactItems>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
时间: 2024-10-21 12:59:51

Maven打包jar项目的相关文章

基于spring打包 maven 打包jar项目

J2EE项目开发 一般使用tomcat等servlet容器,有些自动化的任务却不需要放在servlet容器中, 把任务打包成jar会更方便部署 使用Maven打包Spring的jar包

maven打包hadoop项目(含第三方jar)

问题背景: 1 写map-reduce程序,用到第三方jar,怎么打包并提交项目到服务器执行. 2 mahout中itembased算法,将uid从string映射为long. 我这里实现的具体功能是: Mahout的itembased算法的数据格式是:uid,vid,score.其中uid和vid必须是数字型(long),score是小数整数都可以. 然而我这里每行记录的字段uid,vid,score, uid是含有字母.因此我必须把uid从string映射到long. 考虑到速度,就用分布式

maven 打包web项目成jar, 可放在服务器上运行

1.pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <

maven 打包 spring 项目

在程序中使用到了springframework控件(主要是为了使用Mybatis-spring操作数据库,省事). 使用maven管理项目的构建,现在需要生成一个jar包,包含所有依赖的jar包,并可以在命令行使用java -jar [filename] 来运行. 1. maven-assembly-plugin 最开始的时候尝试使用maven-assembly-plugin插件,配置如下: <build> <plugins> <plugin> <groupId&

maven打包 jar

使用插件maven-shade-plugin可以方便的将项目已jar包的方式导出,插件的好处在于它会把项目所依赖的其他jar包都封装起来,这种jar包放在任何JVM上都可以直接运行,我最初使用eclipse的maven-build直接打包,转移到intellij idea后没有这个按钮了,就只能用命令行搞了 首先,将插件添加到pom.xml中,其次使用mvn package打包,最后到projectName/target/下查找目标jar包 <build> <plugins> &l

学习日志--hadoop maven打包jar问题

起初是用maven的build来clean package项目,生成jar包,然后在hadoop上运行,出现classNotFound错误. 提示没有找到redis.jedis.redis..错误. 错误原因:生成的jar包里,没有打进去maven依赖. 解决办法:重建了maven项目,把单独的运行在mapreduce上的程序打包,用runnable jar来打包,生成的jar比原先的jar包大一个数量级(以前是k,现在是M).然后在hadoop上运行,就可以了.

idea使用maven打包jar包

1.在pom.xml中加入以下内容: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apach

maven打包后项目名称不对

昨晚打包一个刚开发好的毕业设计项目,然后启动tomact发现老是报404.排查了才发现原来是打包之后的项目名称带有版本号,如图: 网上看了一些类似的问题,说的web.xml没有配对,但其实不然,我重新创建了一个新的maven项目,然后进行打包,发现并不会有这个问题,对比pom.xml才发现原来少了 <build> <finalName>cms</finalName> </build> 加上这句就可以自定义project的名称了.

maven打包jar源码至私服

1. setting文件 配置私服中设置的用户和密码 <servers> <server> <id>releases</id> <username>admin</username> <password>xxxxxxxxxxx</password> </server> <server> <id>snapshots</id> <username>admin