`

maven常用命令

 
阅读更多

Java独立应用程序的执行有两种方式: 
   java -jar 命令 
和 java -classpath 命令 

    其中,因为java -jar 不接收classpath参数(或者说-classpath对它不起作用),因此必须把所有依赖的文件都打到一个jar里(比如 One jar)。这样就存在一个问题:修改这个独立应用程序的配置文件会很不方便。(ps:当前路径是它的类路径)。 
    所以除非不用配置信息或从命令行指定配置信息,更好的方式应该是使用java -cp(即-classpath)的方式,并从类路径中读取配置文件。 

    那么,一个独立应用程序的目录结构可以是如下形式: 
    1、一个lib文件夹用于存放这个独立应用程序所依赖的jar包。 
    2、把这个独立应用程序所依赖的配置文件(而且是可能需要修改的)放在与jar包同级目录下。 
    3、一个jar包,里面是主程序。 

    若要执行这个独立应用程序,可以使用脚本拼出classpath的值,然后调用java -cp 命令。 
    
    在Linux下使用shell脚本: 
   
Shell代码   收藏代码
  1. CLASSPATH="."  
  2. # 遍历应用程序依赖的jar包,并加入CLASSPATH。  
  3. for jarfile in `ls lib/.`; do  
  4.     CLASSPATH="${CLASSPATH}:lib/$jarfile"  
  5. done  
  6.   
  7. #---------------下面是以前写错的部分,不需要这种方式把配置文件加入到类中径中。  
  8. # 因为类路径中设都应该是目录(而不是文件),jar文件也是按目录来处理的  
  9. #  
  10. # 配置文件的遍历(与上类似)  
  11. # 这里面我的配置文件都是xml的  
  12. #for configfile in `ls *.xml`; do  
  13. #    CLASSPATH="configfile:${CLASSPATH}"  
  14.   
  15. export CLASSPATH  
  16. java -cp ${CLASSPATH} Test  


    在windows平台下就要麻烦一些了,使用dos批处理: 
   
Batch代码   收藏代码
  1. @echo off  
  2. for %%i in (lib/*.jar) do call cpappend.bat %%i  
  3. java -cp %CLASSPATH% Test  


    下面是cpappend.bat: 
   
Batch代码   收藏代码
  1. @echo off  
  2. if ""%1"" == """" goto end  
  3. set CLASSPATH=%CLASSPATH%;lib/%1  
  4. shift  
  5.   
  6. rem Process the remaining arguments  
  7. :setArgs  
  8. if ""%1"" == """" goto doneSetArgs  
  9. set CLASSPATH=%CLASSPATH% %1  
  10. shift  
  11. goto setArgs  
  12. :doneSetArgs  
  13. :end  

    cpappend.bat是不是见过?没错,tomcat下的,直接从那抄的,dos的批处理的写法我是没研究明白。 

    set CLASSPATH=%CLASSPATH%;lib/%1后面不要有空格。 

注:类路径中,最好把配置文件的路径放在jar文件的路径之前,因为我们实际项目中遇到过:有的jar包中包含同名配置文件把我们自己的配置文件给覆盖了的情况。改一下在classpath中的顺序,这样就可以让程序优先使用我们的配置文件。 

    这样,方便修改配置的独立应用程序的执行方法已经出来了。下面的问题是,那些依赖的jar包,以及配置文件谁来拷出来?用maven来做这件事是最方便不过的了。 
    使用maven的resources插件。 
    下面我们要做的就是:在使用maven打包时,把程序依赖的jar包都拷出来,配置文件拷出来。同时,因为要使用外部的配置文件,所以要避免把配置文件打到jar包里。pom里的配置如下: 
   
Pom代码   收藏代码
  1. <!-- 把依赖的jar包拷到lib目录下 -->  
  2. <plugin>  
  3.     <groupId>org.apache.maven.plugins</groupId>  
  4.     <artifactId>maven-dependency-plugin</artifactId>  
  5.     <executions>  
  6.         <execution>  
  7.             <id>copy-dependencies</id>  
  8.             <phase>package</phase>  
  9.             <goals>  
  10.                 <goal>copy-dependencies</goal>  
  11.             </goals>  
  12.             <configuration>  
  13.                 <outputDirectory>${project.build.directory}/lib</outputDirectory>  
  14.                 <overWriteReleases>false</overWriteReleases>  
  15.                 <overWriteSnapshots>false</overWriteSnapshots>  
  16.                 <overWriteIfNewer>true</overWriteIfNewer>  
  17.             </configuration>  
  18.         </execution>  
  19.     </executions>  
  20. </plugin>  
  21.      <!-- 以utf-8编码拷贝配置文件,拷贝过程中是可以做变量替换的,也就是说你的配置文件可以是个模板,里面的${}所包含的内容是可以拷贝过程中替换的 -->  
  22. <plugin>  
  23.     <groupId>org.apache.maven.plugins</groupId>  
  24.     <artifactId>maven-resources-plugin</artifactId>  
  25.     <version>2.3</version>  
  26.     <executions>  
  27.         <execution>  
  28.             <id>copy-resources</id>  
  29.             <phase>package</phase>  
  30.             <goals>  
  31.                 <goal>copy-resources</goal>  
  32.             </goals>  
  33.             <configuration>  
  34.                 <encoding>UTF-8</encoding>  
  35.                 <outputDirectory>${project.build.directory}</outputDirectory><!-- 把配置文件拷到和jar包同一个路径下 -->  
  36.                 <resources>  
  37.                     <resource>  
  38.                         <directory>src/main/resources/</directory>  
  39.                         <includes>  
  40.                             <include>config.xml</include>  
  41.                             <include>log4j.xml</include>  
  42.                         </includes>  
  43.                         <filtering>true</filtering>  
  44.                     </resource>  
  45.                 </resources>  
  46.             </configuration>  
  47.         </execution>  
  48.     </executions>  
  49. </plugin>  
  50. <!-- 打jar包时需要把配置文件给排除在外 -->  
  51. <plugin>  
  52.     <groupId>org.apache.maven.plugins</groupId>  
  53.     <artifactId>maven-jar-plugin</artifactId>  
  54.     <executions>  
  55.         <execution>  
  56.             <phase>package</phase>  
  57.             <goals>  
  58.                 <goal>jar</goal>  
  59.             </goals>  
  60.             <configuration>  
  61.                 <classifier>lib</classifier>  
  62.                 <excludes>  
  63.                     <exclude>config.xml</exclude>  
  64.                     <exclude>log4j.xml</exclude>  
  65.                 </excludes>  
  66.             </configuration>  
  67.         </execution>  
  68.     </executions>  
  69. </plugin>  
  70.    


上面有几个需要特别说明的地方: 
1、phase节点,表示要在什么阶段执行这个任务,比如 
Pom代码   收藏代码
  1. <phase>package</phase>  
  2.                         <goals>  
  3.                             <goal>copy-dependencies</goal>  
  4.                         </goals>  

表示在打包(package)之前执行copy-dependencies的任务(关于copy-dependencies,请查阅resources插件的说明)。 
2、最后一个plugin节点中的classifier节点,表示这种方式(排除了配置文件)打出的jar包通过什么来和别的jar包区分开,我设的值是lib,这样打出来的包名就是:xxxx-lib.jar 
3、最后一个plugin节点中的: 
Pom代码   收藏代码
  1. <exclude>config.xml</exclude>                               <exclude>log4j.xml</exclude>  

可以写成: 
Pom代码   收藏代码
  1. <exclude>*.xml</exclude>  

我没这么写,是因为我还有其它的.xml文件不需要放在外面。 

到这里,用maven打独立应用程序的jar包的方式就讲解完了。在这再补充一个小知识。 
如果你有多个工程,统一用一个父pom来管理(这些工程的pom都继承自父pom),如果有的工程中使用了resources插件,你在使用maven打包时,会出现错误,maven命令无法成功执行。 
提示的错误大意是:你在pom中指定要执行copy-resources任务,却没有resources插件。 
解决的办法是在父pom中加入: 
Pom代码   收藏代码
  1. <pluginManagement>  
  2.           <plugins>  
  3.             <plugin>  
  4.               <groupId>org.apache.maven.plugins</groupId>  
  5.               <artifactId>maven-resources-plugin</artifactId>  
  6.               <version>2.3</version>  
  7.               <configuration>  
  8.                 <encoding>UTF-8</encoding>  
  9.               </configuration>  
  10.             </plugin>  
  11.           </plugins>  
  12.         </pluginManagement>  

 

分享到:
评论

相关推荐

    maven常用命令.docx

    以下是对标题和描述中提及的Maven常用命令的详细解释: 1. `mvn clean`:这个命令用于清理项目,删除`target`目录下的所有生成物,包括编译后的类文件、测试结果等。 2. `mvn compile`:编译项目的源代码,将`src/...

    Maven常用命令 Maven Maven学习

    Maven常用命令 Maven Maven学习

    maven 常用命令集合

    maven 常用命令集合 Maven 是一个基于项目对象模型(Project Object Model,POM)的项目管理工具,主要用于 Java 项目的构建、测试和部署。Maven 的强大之处在于其提供了一种标准化的方式来构建、测试和部署项目,...

    maven常用命令以及以个测试项目

    ### Maven常用命令 1. **初始化项目结构**: - `mvn archetype:generate` 是用于创建一个新的Maven项目的基础框架。你可以根据提示选择对应的archetype,如maven-archetype-quickstart,来快速生成一个简单的...

    maven 常用命令

    一、Maven常用命令 1. 初始化项目结构: `mvn archetype:generate` - 这个命令用于创建一个新的Maven项目,根据提示选择相应的 archetype(项目模板)来生成基础项目结构。 2. 编译源代码: `mvn compile` - ...

    maven常用命令.txt

    ### Maven常用命令详解 #### 1. `mvn -v` - **命令**: `mvn -v`(注意:实际命令应为 `mvn --version` 或 `mvn -version`) - **功能**: 显示Maven当前版本信息。 - **应用场景**: 当需要确认当前使用的Maven版本时...

    Maven常用命令

    Maven常用命令 mvn archetype:create :创建 Maven 项目 mvn compile :编译源代码 mvn test-compile :编译测试代码 mvn test : 运行应用程序中的单元测试 mvn site : 生成项目相关信息的网站 mvn clean :清除...

    maven常用的命令

    Maven 常用命令 Maven 是一个基于项目对象模型(Project Object Model,POM)的项目管理工具,主要用于管理和构建 Java 项目。以下是 Maven 中的一些常用命令: 1. 创建项目 Maven 提供了 archetype 机制来快速...

    Maven常用命令大全与pom文件讲解

    摘要:本文主要讲解是Maven使用过程中一些常用的命令,并配上图片说明,最后还讲了pom.xml文件的一些构造。-D传入属性参数-P使用pom中指定的配置-e显示maven运行出错的信息-o离线执行命令,即不去远程仓库更新包-X...

    Maven 常用命令都准备好给你了.docx

    以下是一些Maven的常用命令及其详细解释: 1. **创建Maven项目**: - `mvn archetype:create -DgroupId=packageName -DartifactId=projectName`:创建一个基本的Java项目。 - `mvn archetype:create -DgroupId=...

    java开发maven命令详解

    ### Maven命令详解 Maven是Java项目自动化构建工具的一个标准,它通过一组生命周期构建项目对象模型(POM),简化了构建...以上就是关于Maven常用命令的详细介绍。通过掌握这些命令,可以更高效地管理和构建Java项目。

    Mvn常用命令总结

    ### Maven常用命令总结 Maven是一款非常流行的Java项目构建工具,它通过一组生命周期构建规则来管理项目的构建过程,包括编译、测试、打包、部署等。掌握Maven的基本使用方法对于进行Java项目的开发和维护至关重要...

    maven配置命令及项目部署

    以下是一些常用的maven配置命令: * mvn -v:查看maven版本 * mvn compile:进行编译 * mvn test:运行测试类 * mvn package:生成jar包 * mvn clean:删除target目录 * mvn install:将jar包安装到本地仓库 * mvn ...

    适用于windows-x64位的maven压缩包

    使用于windows-x64为的压缩包 将此文件解压,并保存到你...maven常用命令 mvn compile编译当前项目 mvn clean清理当前目录 mvn test测试src/test文件夹下的代码 mvn package 打包此项目 mvn install 安装此项目的依赖包

    maven命令行相关命令集锦

    本文将对Maven构建Web工程相关的常用命令进行总结。 #### Maven项目初始化 - **初始化Java应用** - 命令格式:`mvn archetype:generate -DgroupId=...

Global site tag (gtag.js) - Google Analytics