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 ...

用Maven跑Java main的3种方法

概述Maven exec plugin可以使我们运行自己工程的Java类的main方法,并在classpath里自动包含工程的dependencies。本文用示例代码展示了使用maven exec p...

Maven生成可以直接运行的jar包的多种方式

Maven可以使用mvn package指令对项目进行打包,如果使用java -jar xxx.jar执行运行jar文件,会出现"no main manifest attribute, in xxx....

Maven 打包可执行 jar( Main-Class)

Maven 将java 项目打包成 jar ,并且通过java -jar 命令来执行,一般需要怎么来配置。 例子:java 项目结构 图 maven pom 配置 <projec...

log4j的单独使用(不依赖于web容器)

log4j是可以单独使用的,也可以在web框架中使用,这里先介绍log4j的单独使用。

只能在有限的一些情形下使用 volatile 变量替代锁。要使 volatile 变量提供理想的线程安全,必须同时满足下面两个条件:1对变量的写操作不依赖于当前值。 2该变量没有包含在具有其他

Java™ 语言包含两种内在的同步机制:同步块(或方法)和 volatile 变量。这两种机制的提出都是为了实现代码线程的安全性。其中 Volatile 变量的同步性较差(但有时它更简单并且开销更低)...

Json串与实体的相互转换 (不依赖于jar包 只需Eclipse环境即可)

Json串与实体的相互转换 (不依赖于jar包 只需Eclipse环境即可) 最近学习了javaWeb开发,用的是ssh框架里面自己整合了hibernate 和Struts2 和spring框架,其...

自定义不依赖于Activity的Toast

/** * 自定义Toast类 * Created by Administrator on 16-11-28. */ public class Tast { //挂载的View ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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