• maven: 打包可运行的jar包(java application)及依赖项处理


    IDE环境中,可以直接用exec-maven-plugin插件来运行java application,类似下面这样:

    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>1.2.1</version>
        <executions>
            <execution>
                <goals>
                    <goal>exec</goal>
                </goals>
            </execution>
        </executions>
        <configuration>
            <executable>java</executable>
            <arguments>
                <argument>-classpath</argument>
                <classpath>
                </classpath>
                <argument>ctas.importer.reader.app.Program</argument>
            </arguments>
        </configuration>
    </plugin>

    18行,改成自己的Main-Class类,然后用mvn exec:exec来运行,但是部署到生产环境中时,服务器上通常并不具备maven环境,只能用 java -jar xxx.jar这种方式来运行,下面是一些处理细节:

    一、依赖项的处理

    java application运行时需要查找依赖的第三方jar,如果查找classpath失败,就会报错,可以先用

    mvn dependency:copy-dependencies -DoutputDirectory=target/lib

    命令,把依赖的jar包全部导出到target/lib这个目录下

    二、利用maven-jar-plugin修改META-INFMANIFEST.MF 清单文件

    java application的最终jar里,用解压工具打开后,可以看到META-INF目录下,有一个重要的清单文件 MANIFEST.MF,这里面可以指定 Main-Class及classpath,结构如下:

    1 Manifest-Version: 1.0
    2 Built-By: jimmy
    3 Build-Jdk: 1.7.0_09
    4 Class-Path: lib/DataEntity-1.0.jar ...
    5 Created-By: Apache Maven 3.2.3
    6 Main-Class: ctas.importer.reader.app.Program
    7 Archiver-Version: Plexus Archiver

    其中第4行指定了classpath,也就是所依赖的jar包在什么地方,第6行表示main函数的入口类,默认情况下mvn clean package生成的jar包里,清单文件上并没有这2行,需要在pom.xml中添加插件

     1 <plugin>
     2     <groupId>org.apache.maven.plugins</groupId>
     3     <artifactId>maven-jar-plugin</artifactId>
     4     <configuration>
     5         <archive>
     6             <manifest>
     7                 <mainClass>ctas.importer.reader.app.Program</mainClass>
     8                 <addClasspath>true</addClasspath>
     9                 <classpathPrefix>lib/</classpathPrefix>
    10             </manifest>
    11         </archive>
    12         <classesDirectory>
    13         </classesDirectory>
    14     </configuration>
    15 </plugin>

    第7行指定Main-Class,第9行指定classpath的相对路径,这样mvn package后,清单文件里就会自动添加Main-Class和Class-Path这二项

    ok了,部署时把jar包和lib目录,都上传到服务器上 ,然后测试一下,顺利的话 java -jar  xxx.jar就可以了,如果要在后台运行,前面加 nohup

    作者:菩提树下的杨过
    出处:http://yjmyzz.cnblogs.com 
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    jquery选择器
    js中的闭包技术
    idea创建servlet不能创建:
    JSP页面不解析EL表达式的原因
    大对象数据LoB的应用
    缓冲流、转换流、序列化流相关流知识点
    jdk5.0新特性(注解)
    EKT相关知识(Class类对象的方法补充)
    java中调用存储过程或函数
    Java 缓冲流
  • 原文地址:https://www.cnblogs.com/printN/p/7248625.html
Copyright © 2020-2023  润新知