• 使用maven打包普通的java项目


    使用maven打包普通的java项目

    这篇文章如何将一个maven项目打包成可执行的jar包,方便再其他机器上面运行。不会出现找不到主类的情况。

    TL;DR

    直接点击下面这个目录的附加选项。

    使用quickstart模板创建maven项目(如果有的话,可以跳过)

    创建的过程

    第一步新建一个Module1608042420392
    第二步 然后按照下图所示点击(如果你从来没有接触过maven的话)1608042307874
    第三步 填写maven项目的信息1608042519562
    通过quickstart模板创建完成后的项目的结构

    1608042622100

    小修改: 将jdk的版本改成1.8

    由于我主要使用的是java1.8 而quickstart这个模板用的是java 1.7 ,所以我们要修改pom.xml文件。下图是修改方法1608042802549

    修改后的样子1608042845848

    这个是App文件的内容,我们可以看到,仅仅是输出hello world而已

    package com.example;
    
    /**
     * Hello world!
     */
    public class App {
        public static void main(String[] args) {
            System.out.println("Hello World!");
        }
    }
    

    正式的步骤

    具体步骤

    修改pom.xml的build标签:添加assembly依赖并且指定jar包的主类

    <build>
      <plugins>
        <plugin>
          <artifactId>maven-assembly-plugin</artifactId>
          <configuration>
            <archive>
              <manifest>
               <!-- 这个mainClass 用来指定 jar的主类,使用的是全限定名称 -->   
               <!-- <mainClass>fully.qualified.MainClass</mainClass> -->
               <mainClass>com.example.App</mainClass>
              </manifest>
            </archive>
            <descriptorRefs>
              <descriptorRef>jar-with-dependencies</descriptorRef>
            </descriptorRefs>
          </configuration>
        </plugin>
      </plugins>
    </build>
    

    修改后的完整的pom文件应该是这个样子的

    <?xml version="1.0" encoding="UTF-8"?>
    
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
    
      <groupId>com.example</groupId>
      <artifactId>demo</artifactId>
      <version>1.0-SNAPSHOT</version>
    
      <name>demo</name>
      <!-- FIXME change it to the project's website -->
      <url>http://www.example.com</url>
    
      <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
      </properties>
    
      <dependencies>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.11</version>
          <scope>test</scope>
        </dependency>
      </dependencies>
    
    
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <configuration>
              <archive>
                <manifest>
                  <!-- 这个mainClass 用来指定 jar的主类,使用的是全限定名称 -->  
                  <!--<mainClass>fully.qualified.MainClass</mainClass>-->
                  <mainClass>com.example.App</mainClass>
                </manifest>
              </archive>
              <descriptorRefs>
                <descriptorRef>jar-with-dependencies</descriptorRef>
              </descriptorRefs>
            </configuration>
          </plugin>
        </plugins>
      </build>
    
    </project>
    
    

    打包项目

    做到这一步,我们已经完成了所有的前置工作了。

    我们可以随时用这条命令mvn clean compile assembly:single打包这个项目。

    执行这条命令的结果如图1608043225324

    运行起来试试,看来我们成功了。1608043248670

    附加选项

    如果在pom.xml<build>标签里面添加一些下面这样的配置的话,

    那么可以直接使用在pom.xml同级目录下使用一行指令mvn package打包

    <build>
      <plugins>
        <!-- 其他的一些plugin... -->
        <plugin>
          <artifactId>maven-assembly-plugin</artifactId>
          <configuration>
            <archive>
              <manifest>
                <!--这里改成你主类的全限定名称-->
                <mainClass>com.example.App</mainClass>
              </manifest>
            </archive>
            <descriptorRefs>
              <descriptorRef>jar-with-dependencies</descriptorRef>
            </descriptorRefs>
          </configuration>
          <!--在执行package动作的时候,自动打包-->
          <executions>
            <execution>
              <phase>package</phase>
              <goals>
                <goal>single</goal>
              </goals>
            </execution>
          </executions>
        </plugin>
        <!-- 其他的一些plugin... -->
      </plugins>
    </build>
    
    
  • 相关阅读:
    ie兼容问题整理
    jQuery Easing 使用方法及其图解
    前端模块化学习
    velocity常用语句速查表
    table插件实现
    表单自动提交问题整理
    移动端开发
    工具的使用及配置
    《TCP/IP详解 卷1:协议》读书笔记
    iOS 内存泄漏
  • 原文地址:https://www.cnblogs.com/Blithe-Chiang/p/14141493.html
Copyright © 2020-2023  润新知