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给spring项目打可直接运行的jar包(配置文件内置外置的打法)

从网上看过许多打jar包的例子,大多是将配置文件打进jar包的。经过本人一番研究,终于搞清楚了怎样将jar包的配置文件外置。 废话不说,直接上spring的pom.xml的配置文件。 ...
  • hj7jay
  • hj7jay
  • 2016年07月30日 14:04
  • 3371

Maven总结(一)Maven构建可执行的jar包

Maven构建可执行的jar包
  • birdben
  • birdben
  • 2016年07月07日 05:48
  • 5168

maven打jar包同时添加MANIFEST.MF文件中Class-Path所有需要jar

有个项目,完成或的打包成了jar包,期间大量引用了开源框架,如果一个个修改MANIFEST.MF文件中Class-Path会死掉,幸好maven提供了这个功能。   Xml代码   ...
  • gchichafengyun
  • gchichafengyun
  • 2014年08月22日 15:47
  • 1100

maven打包在MANIFEST.MF文件中增加属性

最近在学习java agent,需要在生成的jar包里面的 META-INF/MAINIFEST.MF 必须包含 Premain-Class这个属性。采用MAVEN的maven-jar-plugin插...
  • long243416336
  • long243416336
  • 2015年12月15日 09:13
  • 7407

Maven工程产生Jar时Main-Class和Class-Path的配置文件

现在在Java工程中使用Maven已经是非常常见的配置。而对于Maven工程默认产生的Jar却不是可执行的,尤其在你创建了一个桌面应用程序后,不能直接执行是致命的。于是在本文中,我简单记录下如何配置使...
  • alanzyy
  • alanzyy
  • 2015年08月10日 16:33
  • 10655

maven 把classpath打包到manifes.mf文件中

org.apache.maven.plugins maven-jar-plugin ${jar.version} ${th...
  • wangtao6791842
  • wangtao6791842
  • 2013年11月27日 17:23
  • 3228

Maven工程产生Jar时Main-Class和Class-Path的配置文件

写这篇博客主要是为了自己以后能快速的查到。   在pom.xml文件的project节点中加入以下build内容:   [html] view plain copy...
  • zljjava
  • zljjava
  • 2016年06月05日 17:05
  • 1366

maven打可执行的jar包以及classpath设置

http://drizzlewalk.blog.51cto.com/2203401/416508 一  将maven构建的工程打成jar包,并使用脚本做定时任务 1.首先将maven搭建的...
  • shuixin536
  • shuixin536
  • 2013年05月30日 18:52
  • 25538

Maven打包的三种方式

Maven可以使用mvn package指令对项目进行打包,如果使用Java -jar xxx.jar执行运行jar文件,会出现"no main manifest attribute, in xx...
  • daiyutage
  • daiyutage
  • 2016年12月19日 14:33
  • 35362

maven中自定义可执行jar包的MANIFEST

在上一篇文章中介绍了如何利用maven构建可执行jar包,但是如果还依赖了pom中定义的dependency之外的外部jar包,maven-jar-plugin不会把这些jar包的依赖信息放在MANI...
  • apexlj
  • apexlj
  • 2015年07月23日 11:11
  • 3535
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Maven执行Main方法(不依赖于classpath)及依赖查看(三)
举报原因:
原因补充:

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