`
wolf_19
  • 浏览: 165518 次
社区版块
存档分类
最新评论

Maven按照目标环境生成指定可执行的jar

阅读更多

在实际的项目中,我们经常会碰到这样的需求:“通过执行某条命令搞定一些的事情”。


如果开发人员比较擅长一些脚本语言,那么很幸运,他可以直接写好脚本,然后直接在命令行执行就好了。

如果开发人员恰好只擅长一些静态语言,比如Java、C......,也可以借助一些工具来生成最终可以执行的文件,然后直接在命令行中调用就好了。

那这样看来,好像没有什么难的事情。的确,如果事情仅仅只是这样,当然比较简单,关键问题是经常开发环境与测试环境还有生产环境往往不是完全一样。那么我们需要经常在不同的环境下更改配置来达到当前环境的要求,这样一来,需要手工操作的事情就比较多了,尤其是在测试与多方联调时,部署的人员肯定要骂人了。

好吧,说了这么多废话,我们现在开始正式面对这样的问题并且用一种相对优雅的方式来解决它吧。


假设,我们现在使用Java来做这件事情。那我们会按照迭代的方式来慢慢来做。

首先我们先做一个可以执行的jar。这个比较简单,大部分的程序员都可以直接使用自己的IDE来直接将项目导出成一个可以执行的jar。但是现在已经不是一个人就可以完成所有事情的时代,在注重团队配合的年代,我们当然要选择一种不依赖开发人员个人环境的方式来完成这件事情。很庆幸,我们有maven 。我们可以在maven中很轻易的完成这样的事情,同时也不会依赖某个人的环境。

我们需要在pom.xml中加上下面的配置就OK了。

<plugin> 
     <artifactId>maven-assembly-plugin</artifactId> 
     <version>2.2-beta-5</version> 
     <configuration> 
          <archive>
               <manifest>
                    <mainClass>com.wolf.Process</mainClass>
               </manifest>
          </archive>
          <descriptorRefs> 
               <descriptorRef>jar-with-dependencies</descriptorRef> 
          </descriptorRefs> 
     </configuration> 
</plugin>
 
OK,根据上面的配置,我们可以很轻易的使用 mvn:assembly:assembly 这个命令得到一个可以执行的jar,并且这个jar中还会将这个项目说要依赖的第三方的jar都打到这个jar中,我们可以直接使用java -jar xxxx.jar来执行我们指定的代码了。

如果,我们需要在生成这个可执行的jar的事情做一些更加个性化的东西应该怎么办呢?比如,项目中需要依赖spring,但是这样直接生成的jar在执行的时候,却报一个schema namespace的错误,原因是自动生成的jar中的META-INF目录中包含的spring-schemas和spring-handlers文件缺少一些我们需要的schema的定义和解析方式。那其实也很好解决,我们可以指定assembly.xml让maven 帮我们处理这个问题。具体配置如下:

pom.xml

<build>
     <plugins>
          <plugin>
               <artifactId>maven-assembly-plugin</artifactId>
               <configuration>
                    <archive>
                         <manifest>
                              <mainClass>com.wolf.Process</mainClass>
                         </manifest>
                    </archive>
                    <descriptors>
                         <descriptor>src/main/resources/META-INF/assemble.xml</descriptor>
                    </descriptors>
               </configuration>
          </plugin>
     </plugins>
</build>


assemble.xml

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
    <id>jar-with-dependencies</id>
    <formats>
        <format>jar</format>
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>
    <dependencySets>
        <dependencySet>
            <outputDirectory>/</outputDirectory>
            <unpack>true</unpack>
            <unpackOptions>
                <excludes>
                    <exclude>META-INF/spring.handlers</exclude>
                    <exclude>META-INF/spring.schemas</exclude>
                </excludes>
            </unpackOptions>
            <scope>runtime</scope>
        </dependencySet>
    </dependencySets>
    <files>
        <file>
            <source>src/main/resources/META-INF/spring.handlers</source>
            <outputDirectory>META-INF</outputDirectory>
        </file>
        <file>
            <source>src/main/resources/META-INF/spring.schemas</source>
            <outputDirectory>META-INF</outputDirectory>
        </file>
    </files>
</assembly>
 
现在我们第一个需求解决了,可以用一种通用的方式来生成一个可以执行的jar,那么我们接下来要解决的是另外一个问题,如何生成指定目标环境的jar。

其实也很简单,我们只要引入maven 的profile配置就可以了。具体配置如下:

pom.xml

<profiles>
     <profile>
          <id>windows</id>
          <build>
               <plugins>
                    <plugin>
                         <artifactId>maven-assembly-plugin</artifactId>
                         <configuration>
                              <descriptors>
                                   <descriptor>src/main/resources/META-INF/assemble-linux.xml</descriptor>
                              </descriptors>
                         </configuration>
                    </plugin>
               </plugins>
          </build>
          <activation>
               <property><name>windows</name></property>
          </activation>
     </profile>
     <profile>
          <id>linux</id>
          <build>
               <plugins>
                    <plugin>
                         <artifactId>maven-assembly-plugin</artifactId>
                         <configuration>
                              <descriptors>
                                   <descriptor>src/main/resources/META-INF/assemble-linux.xml</descriptor>
                              </descriptors>
                         </configuration>
                    </plugin>
               </plugins>
          </build>
          <activation>
               <property><name>linux</name></property>
          </activation>
     </profile>
</profiles>
 

这样,我们只要执行mvn -Dwindwos assembly:assembly 或者 mvn -Dlinux assembly:assembly 就可以生成指定目标环境的可执行的jar了。

PS:如果你想不同目标环境jar的名字不同,我们可以在相应的assemble.xml文件中更改那个id的值就可以了。
分享到:
评论

相关推荐

    maven生成可执行jar命令

    ### Maven生成可执行JAR命令详解 在Java开发过程中,Maven作为一种强大的自动化构建工具,被广泛应用于项目的构建、依赖管理以及生命周期管理等场景。本文将详细介绍如何利用Maven生成可执行的JAR文件,并部署至...

    Maven 生成打包可执行jar包的方法步骤

    本文将详细讲解如何使用Maven生成可执行的JAR包,以满足特定的需求。 首先,我们来看一下生成可执行JAR包的需求: 1. 整个项目被打包成一个ZIP文件,包含应用程序、其依赖的JAR包和说明文档。 2. JAR包应可执行,...

    maven生成可执行exe文件

    一个常用的插件是`exec-maven-plugin`,它允许我们指定主类并生成可执行文件。 2. **添加插件依赖** 在`pom.xml`文件中的`&lt;build&gt;`部分,添加以下代码来引入`exec-maven-plugin`: ```xml &lt;groupId&gt;org....

    maven打可执行JAR包

    在本文中,我们将详细讨论如何使用Maven来创建可执行的JAR包,使得通过`java -jar`命令可以直接运行。我们提供两种方法来实现这个目标。 ### 方法一:使用`maven-assembly-plugin` 1. **集成插件**:在`pom.xml`...

    myeclipse用maven构建dubbo服务的可执行jar包

    在IT行业中,构建可执行的Java应用程序通常是...总的来说,MyEclipse结合Maven和Dubbo,可以简化微服务的开发和部署流程,通过合理的配置,我们可以生成一个包含了所有依赖的可执行JAR包,便于在各种环境中运行和分发。

    如何生成可执行jar文件

    在Java编程环境中,生成可执行JAR(Java Archive)文件是一项常见的任务,它允许我们将类文件、资源和其他依赖项打包成一个独立的可执行文件。这样,用户无需安装Java环境,只需双击JAR文件即可运行程序。以下是生成...

    maven打包 maven打jar包详细步骤

    例如,如果你想要创建一个可执行的JAR,需要在manifest中指定启动类。这通常在`pom.xml`文件中通过以下配置实现: ```xml &lt;groupId&gt;org.apache.maven.plugins &lt;artifactId&gt;maven-jar-plugin &lt;version&gt;3.2.0...

    可执行jar文件.以及执行命令

    5. **工具的使用**:有时候,开发者会使用构建工具如Maven或Gradle自动化构建过程,包括创建可执行JAR。这些工具能够自动生成`MANIFEST.MF`,并整合依赖,生成单个可运行的JAR。 6. **Fat JAR**或**One-JAR**:对于...

    详解如何使用maven生成可以执行的jar

    "使用Maven生成可执行JAR包" Maven是一款流行的Java构建工具,它可以帮助开发者自动化编译、测试、打包和部署Java项目。今天,我们将讨论如何使用Maven生成可执行JAR包。 什么是可执行JAR包? 可执行JAR包是一种...

    Maven仓库理解、如何引入本地包、Maven多种方式打可执行jar包

    如果需要生成可执行的jar,需要配置`maven-jar-plugin`,并设置`Main-Class`属性,示例如下: ```xml &lt;groupId&gt;org.apache.maven.plugins &lt;artifactId&gt;maven-jar-plugin &lt;version&gt;3.2.0 ...

    如何生成jar包

    另外,`-C`参数在创建和更新JAR包时可以用来切换到指定目录下执行jar命令,不过在示例中并没有使用。 最终,生成JAR包后,可以通过Java命令来运行JAR文件。假设清单文件中定义了主类,可以简单地使用命令:`java -...

    Maven 和Maven下载的jar包库

    Maven可以自动下载项目所需的依赖库,并按照预定义的生命周期和构建阶段执行构建任务,如编译、测试、打包、部署等。 **2. Maven的工作原理** Maven的核心概念包括POM、仓库和生命周期。POM是Maven项目的配置文件...

    maven 3 jar 运行文件打包

    6. **可执行JAR的注意事项**:确保所有的依赖库都已被正确包含,如果使用“fat”JAR,注意可能存在的类冲突问题。另外,资源文件(如配置文件)也需要正确地打包到JAR中。 以上就是使用Maven 3打包可运行JAR文件的...

    maven工具.jar

    **Maven工具.jar**是Apache Maven 3.0.4版本的可执行文件,它是Java开发中的一个关键构建工具,主要用于管理和构建Java项目。Maven通过使用一种标准的项目对象模型(Project Object Model, POM),能够自动化项目的...

    可执行的jar全教程

    2. **创建可执行JAR的步骤:** - 编写Java代码并组织类结构。 - 创建一个包含主类的清单文件(MANIFEST.MF),指定主类的全限定名,如`Main-Class: com.example.Main`。 - 使用`jar`命令或者构建工具(如Maven, ...

    maven 可执行程序 文档 需要java环境

    ** Maven 可执行程序文档与Java环境** Maven是一个强大的项目管理和构建工具,在Java开发中广泛应用。它通过读取项目的配置文件(pom.xml),自动管理项目的依赖关系,构建工件(如JAR或WAR文件),并执行测试。在...

    集成小工具,可执行jar包

    在创建可执行JAR时,需要指定启动类,并确保所有依赖的类和库都被包含在内,以保证程序的完整性和可执行性。 在实际开发中,集成小工具可能包括但不限于以下几个方面: 1. 数据处理:比如CSV、XML或JSON的解析工具...

    Maven 构建 Kettle 时所需的部分jar包

    例如,`mvn clean`用于清理项目产生的临时文件,`mvn compile`用于编译源代码,`mvn package`则会打包项目并生成可部署的JAR或WAR文件。在Kettle项目中,可能还需要执行`mvn install`来安装项目到本地仓库,以便其他...

Global site tag (gtag.js) - Google Analytics