jar –zcvf_跟踪异常–第6部分–构建可执行的Jar

jar –zcvf

如果您已经阅读了本系列的前五个博客,您会知道我一直在构建一个Spring应用程序,该应用程序定期运行以检查一大堆错误日志中是否存在异常,然后将结果通过电子邮件发送给您。

编写代码和测试之后,可以肯定的是,下一步也是最后一步是将整个程序打包并将其部署到生产机器上。 实际的部署和打包方法将取决于您自己组织的过程和程序。 但是,在此示例中,我将选择创建和部署可执行JAR文件的最简单方法。 第一步是在几周前完成的,并将我们的输出定义为Maven POM文件中的JAR文件,您可能已经知道,它是使用包装元素完成的:

<packaging>jar</packaging>

可以使用JAR文件,但是在这种情况下,还需要进行进一步的操作:使其可执行。 为了使JAR文件可执行,您需要添加MANIFEST.MF文件并将其放置在名为META-INF的目录中。 清单文件是一个向JVM和人类读者描述JAR文件的文件。

和往常一样,有两种方法可以做到这一点,例如,如果您想让自己的生活变得困难,则可以手工制作自己的文件并将其放在项目src / main / resources中的META-INF目录中目录。 另一方面,您可以使用maven-jar插件并自动执行。 为此,您需要将以下内容添加到您的POM文件中。

<plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>2.4</version>
            <configuration>
                 <archive>
                     <manifest>
                           <addClasspath>true</addClasspath>
                           <mainClass>com.captaindebug.errortrack.Main</mainClass>
                           <classpathPrefix>lib/</classpathPrefix>
                      </manifest>
                 </archive>
            </configuration>
       </plugin>

这里有趣的一点是<archive> <manifest>配置元素。 它包含三个子元素:

  1. addClasspath :这意味着该插件会将类路径添加到MANIFEST.MF文件,以便JVM在运行应用程序时可以找到所有支持jar。
  2. mainClass :这告诉插件将Main-Class属性添加到MANIFEST.MF文件,以便JVM知道在哪里可以找到应用程序的入口点。 在这种情况下,它是com.captaindebug.errortrack.Main
  3. classpathPrefix :这真的很有用。 它使您可以将所有支持jar放在与应用程序主要部分不同的目录中。 在这种情况下,我选择了lib简单名称。

如果运行构建,然后打开生成的JAR文件并提取并检查/META-INF/MANIFEST.MF文件,则会发现类似以下内容:

Manifest-Version: 1.0

Built-By: Roger
Build-Jdk: 1.7.0_09
Class-Path: lib/spring-context-3.2.7.RELEASE.jar lib/spring-aop-3.2.7.RELEASE.jar lib/aopalliance-1.0.jar lib/spring-beans-3.2.7.RELEASE.jar lib/spring-core-3.2.7.RELEASE.jar lib/spring-expression-3.2.7.RELEASE.jar lib/slf4j-api-1.6.6.jar lib/slf4j-log4j12-1.6.6.jar lib/log4j-1.2.16.jar lib/guava-13.0.1.jar lib/commons-lang3-3.1.jar lib/commons-logging-1.1.3.jar lib/spring-context-support-3.2.7.RELEASE.jar lib/spring-tx-3.2.7.RELEASE.jar lib/quartz-1.8.6.jar lib/mail-1.4.jar lib/activation-1.1.jar
Created-By: Apache Maven 3.0.4
Main-Class: com.captaindebug.errortrack.Main
Archiver-Version: Plexus Archiver

最后一步是将所有支持jar编组到一个目录(在本例中为lib目录)中,以便JVM在运行应用程序时可以找到它们。 同样,有两种解决方法:简单方法和困难方法。 困难的方法包括将POM定义的所有JAR文件手动收集在一起(直接和暂时依赖性),然后将它们复制到输出目录。 最简单的方法涉及让maven-dependency-plugin为您完成。 这涉及将以下内容添加到您的POM文件中:

<plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>2.5.1</version>
            <executions>
                 <execution>
                      <id>copy-dependencies</id>
                      <phase>package</phase>
                      <goals>
                          <goal>copy-dependencies</goal>
                      </goals>
                      <configuration>
                           <outputDirectory>
                                ${project.build.directory}/lib/
                           </outputDirectory>
                      </configuration>
                 </execution>
            </executions>
       </plugin>

在这种情况下,您将使用在打包阶段执行的copy-dependencies目标将所有项目依赖项复制到${project.build.directory}/lib/目录–请注意,目录路径lib的最后一部分与上一步中的classpathPrefix设置匹配。

为了使生活更轻松,我还创建了一个小的运行脚本: runme.sh

#!/bin/bash         

echo Running Error Tracking...
java -jar error-track-1.0-SNAPSHOT.jar com.captaindebug.errortrack.Main

就是这样。 该应用程序即将完成。 我已经将其复制到我的构建机器上,该机器现在可以监视Captain Debug Github示例应用程序和构建。

我可以并且确实可以为该应用程序添加更多功能。 有一些需要改进的代码:例如,最好将其作为单独的应用程序运行,还是将其转换为Web应用程序更好? 此外,确保不会两次报告​​相同的错误不是一个好主意吗?

我可能很快就会流连忘返……或者也许我会说其他的事情。 这么少的时间就写很多博客…

该博客的代码可在Github上找到: https : //github.com/roghughe/captaindebug/tree/master/error-track 。 如果您想查看本系列中的其他博客,请在这里看……

  1. 使用Spring跟踪应用程序异常
  2. 使用Spring跟踪异常–第2部分–委托模式
  3. 错误跟踪报告–第3部分–策略和软件包私有
  4. 跟踪异常–第4部分– Spring的邮件发件人
  5. 跟踪异常–第5部分–使用Spring进行计划

翻译自: https://www.javacodegeeks.com/2014/05/tracking-exceptions-part-6-building-an-executable-jar.html

jar –zcvf

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值