Maven执行Main方法(不依赖于classpath)及依赖查看(三)

原创 2012年03月29日 17:49:54

            Maven运行Main方法    

            在Maven使用入门(二)提供了生成含有MainClass类信息的Jar包的方法,用户也可以在项目目录下直接运行main方法(JAR包中不包含MainClass信息) 。
            Maven Exec插件,Exec插件允许你运行Java类和其它脚本。它不是Maven核心插件,但它可以从Codehaus的Mojo项目得到。想要查看Exec插件的完整描述,运行 mvn help:describe -Dplugin=exec -Dfull.这会列出所有 Maven Exec 插件可用的目标。 Help 插件同时也会列出 Exec 插件的有效参数,如果你想要定制 Exec 插件的行为,传入命令行参数,你应该使用help:describe 提供的文档作为指南。 虽然 Exec 插件很有用,在开发过程中用来运行测试之外,你不应该依赖它来运行你的应用程序。 想要更健壮的解决方案,使用Maven Assembly 插件.
           执行命令如下:
           mvn install
           mvn exec:java -Dexec.mainClass=org.sonatype.mavenbook.weather.Main
           Exec 插件让我们能够在不往 classpath 载入适当的依赖的情况下,运行这个程序。 在任何其它的构建系统能够中,我们必须复制所有程序依赖到类似于 lib/ 的目录,这个目录包含一个 JAR 文件的集合。 那样,我们就必须写一个简单的脚本,在classpath 中包含我们程序的二进制代码和我们的依赖。 只有那样我们才能运行 java
org.sonatype.mavenbook.weather.Main 。 Exec 能做这样的工作是因为 Maven 已经知道如何创建和管理你的 classpath 和你的依赖。

           构建一个打包好的命令行应用程序(依赖打进去)
          虽然 Maven Exec 能运行程序并且产生输出,你不能就把 Maven当成是你程序运行的容器。 如果你把这个命令行程序分发给其他人,你大概就需要分发一个 JAR 或者一个 ZIP 存档文件或者 TAR 压缩过的 GZIP 文件。下面介绍了使用 Maven Assembly 插件的预定义装配描述符生成一个可分发的 JAR 文件的过程,该文件包含了项目的二进制文件和所有的依赖。Maven Assembly 插件是一个用来创建你应用程序特有分发包的插件。 你可以使用 Maven Assembly 插件以你希望的任何形式来装配输出,只需定义一个自定义的装配描述符。 后面的章节我们会说明如何创建一个自定义装配描述符,为 SimpleWeather 应用程序生成一个更复杂的存档文件。 本章我们将会使用预定义的 jarwith-dependencies 格式。 要配置 Maven Assembly 插件, 我们需要在 pom.xml 中的build 配置中添加如下的 plugin 配置。

<build>
    <plugins>
         <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
        </plugin>
    </plugins>
</build>


 

添加好这些配置以后,你可以通过运行 mvn assembly:assembly 来构建这个装配。mvn install assembly:assembly
在 target/simple-weather-1.0-jar-with-dependencies.jar 装配好之后, 我们可以在命令行重新运行 Main 类。在你项目的基础目录下运行以下命令:
java -cp simple-weather-1.0-jar-with-dependencies.jar org.sonatype.mavenbook.weather
jar-with-dependencies 格式创建一个包含所有 simple-weather 项目的二进制代码以及所有依赖解压出来的二进制代码的 JAR 文件。

 

           查看依赖

          dependency:resolve(Dependency 插件将会打印出最终的你项目编译所基于的所有依赖的组合) 
          mvn dependency:tree(依赖层次树)
          mvn install -X 如果你还不满足,或者想要查看完整的依赖踪迹,包含那些因为冲突或者其它原因而被拒绝引入的构件,打开 Maven 的调试标记运行,从调试输出我们看到一些依赖管理系统工作的内部信息。从该输出你能看到 Maven 正在创建一个依赖图,排除重复,解决不同版本之间的冲突。 如果你的依赖有问题,通常在dependency:tree 所生成的列表基础上更深入一点会有帮助;开启调试输出允许你看到Maven 工作时的依赖机制。

使用Maven运行Java main的3种方式

http://www.vineetmanohar.com/2009/11/3-ways-to-run-java-main-from-maven/

Maven打包,并获取依赖的jar包 ,设置main方法启动

pom中加入 FlightTask in>                 org.apache.maven.plugins                 m...

给定A, B两个整数,不使用除法和取模运算,求A/B的商和余数

给定A, B两个整数,不使用除法和取模运算,求A/B的商和余数。 1.   最基本的算法是,从小到大遍历: for (i = 2 to A -1)          if (i * B > A)...

利用K-means聚类算法根据经纬度坐标对中国省市进行聚类

K-means聚类算法是一种非层次聚类算法,在最小误差的基础上将数据划分了特定的类,类间利用距离作为相似度指标,两个向量之间的距离越小,其相似度就越高。程序读取全国省市经纬度坐标,然后根据经纬度坐标进...

android.hardware.camera2使用指南

API 21中将原来的camera API弃用转而推荐使用新增的camera2 API,这是一个大的动作,因为新API换了架构,让开发者用起来更难了。 先来看看camera2包架构示意图: 这...

source insight的查找功能

source insight是一款很好的c语言的程序编辑器,方便对project管理,方便程序的阅读和编辑。查找功能使用十分频繁,选项较多,与其它软件的查找功能也类似,下面对英文版的查找功能,做简单说...
  • kobesdu
  • kobesdu
  • 2014年07月24日 14:53
  • 35835

第十一章全部上机代码

上机练习1 --查询每个年级的总学时数,并按照升序排列。 SELECT SUM(ClassHour) AS 总学时,GradeId AS 年级 FROM Subject GROUP BY Grade...

python调用java编写的Webservice

首先我使用的是java自带的对webservice的支持包来编写的服务端和发布程序,代码如下。 webservice的接口代码: package com.xxx.test.ws; import ja...
  • dmcpxy
  • dmcpxy
  • 2014年03月10日 16:06
  • 4690

linux/ubuntu 端口开放

在ubuntu下面开放端口好像主要有两种方法,一种是ubuntu自带的防火墙,一种是iptables,这里我们主要使用iptables。本文的系统版本为ubuntu14.04和ubuntu16.04 ...

java 判断对象是否是某个类的类型两种方法

一、 instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例。instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例。  用法: ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Maven执行Main方法(不依赖于classpath)及依赖查看(三)
举报原因:
原因补充:

(最多只允许输入30个字)