• 使用maven编译Java项目 http://www.tuicool.com/articles/YfIfIrq


    使用maven编译Java项目

    综述

    本文演示了用Maven编译Java项目

    需要

    • 时间:15分钟
    • 文本编辑器或者IDE
    • JDK 6 或者更高版本

    创建项目

    本例主要为了展示Maven,所以Java的项目力求简单。

    创建项目结构

    选择一个项目目录,在 *nix系统上使用下面语句

    mkdir -p src/main/java/hello
    

    window下使用命令

    mkdir srcmainjavahello
    

    创建如下结构:

    └── src
        └── main
            └── java
                └── hello
    

    在  src/main/java/hello 目录下创建Java文件  HelloWorld.java 和  Greeter.java

    src/main/java/hello/HelloWorld.java
    package hello;
    
    public class HelloWorld {
        public static void main(String[] args) {
            Greeter greeter = new Greeter();
            System.out.println(greeter.sayHello());
        }
    }
    
    src/main/java/hello/Greeter.java
    package hello;
    
    public class Greeter {
        public String sayHello() {
            return "Hello world!";
        }
    }
    

    现在项目完成,可以用Maven编译了。有关Maven的安装,可以参考  Apache Maven 3.1.0 安装、部署、使用

    定义简单的Maven编译

    首先,在项目的根目录下创建一个Maven项目定义文件  pom.xml ,该文件主要是说明项目的名称、版本和依赖库 

    pom.xml
    <?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/maven-v4_0_0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>org.springframework</groupId>
      <artifactId>gs-maven</artifactId>
      <packaging>jar</packaging>
      <version>0.1.0</version>
    
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>2.1</version>
            <executions>
              <execution>
                <phase>package</phase>
                <goals>
                  <goal>shade</goal>
                </goals>
                <configuration>
                  <transformers>
                    <transformer
                      implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                      <mainClass>hello.HelloWorld</mainClass>
                    </transformer>
                  </transformers>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </project>
    

    除了<packaging> 元素可选外,其他的元素是构成  pom.xml 文件的最基本的元素了。它包括以下几个项目的配置: 

    • <modelVersion> :POM 模块版本(通常是4.0.0).
    • <groupId> :项目所属的组织编号,通常用域名
    • <artifactId> 项目的名称(比如,JAR或者WAR的名称)
    • <version> 项目编译的版本号
    • <packaging> 项目打包形式,jar或者war

    编译Java代码

    运行下面语句编译

    mvn compile
    

    编译完成的  .class 文件将会出现在  target/classes 目录下.如下图 

    运行项目:

    mvn exec:java -Dexec.mainClass="hello.HelloWorld"
    

    输出如下:

    如果不想直接运行  .class 文件,可以将其打包: 

    mvn package
    

    打包完成后,会在  target 目录下生成一个JAR文件,文件名由<artifactId> 和 <version>组成。比如本例,将会根据  pom.xml 生成  gs-maven-0.1.0.jar.

    如果你想安装您的项目的JAR文件到本地Maven仓库,那么你应该调用下面语句:

    mvn install
    

    此时,你的项目代码将会经过编译、测试、打包并拷贝到本地依赖库,提供给其他项目引用。

    说到项目依赖,下面说下  声明依赖

    声明依赖

    上面的例子比较简单,没有用到其他库。但是真实的项目可能会引用(依赖)到很多其他库。

    下面例子,依赖了  Joda Time 的库。 

    修改  src/main/java/hello/HelloWorld.java

    package hello;
    
    import org.joda.time.LocalTime;
    
    public class HelloWorld {
      public static void main(String[] args) {
        LocalTime currentTime = new LocalTime();
        System.out.println("The current local time is: " + currentTime);
        Greeter greeter = new Greeter();
        System.out.println(greeter.sayHello());
      }
    }
    

    现在运行  mvn compile 将会报错,因为没有声明依赖。在 <project> 节点下插入如下: 

    <dependencies>
      <dependency>
        <groupId>joda-time</groupId>
        <artifactId>joda-time</artifactId>
        <version>2.2</version>
      </dependency>
    </dependencies>
    

    这段内容就声明了项目的依赖。每个依赖节点<dependency>都由三个子节点组成:

    • <groupId> : 该依赖库所属的组织名称
    • <artifactId> : 依赖的库名
    • <version> : 依赖的库版本

    在POM 4中,<dependency> 中还引入了<scope> ,它主要管理依赖的部署。目前<scope> 可以使用5个值:

    • compile,缺省值,适用于所有阶段,会随着项目一起发布。
    • provided,类似compile,期望JDK、容器或使用者会提供这个依赖。如servlet.jar。
    • runtime,只在运行时使用,如JDBC驱动,适用运行和测试阶段。
    • test,只在测试时使用,用于编译和运行测试代码。不会随项目发布。
    • system,类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。

    现在你运行  mvn compile 或者  mvn package ,Maven会自动下载相关依赖。 

    完整的  pom.xml

    <?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/maven-v4_0_0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>org.springframework</groupId>
      <artifactId>gs-maven</artifactId>
      <packaging>jar</packaging>
      <version>0.1.0</version>
    
      <!-- tag::joda[] -->
      <dependencies>
        <dependency>
          <groupId>joda-time</groupId>
          <artifactId>joda-time</artifactId>
          <version>2.2</version>
        </dependency>
      </dependencies>
      <!-- end::joda[] -->
    
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>2.1</version>
            <executions>
              <execution>
                <phase>package</phase>
                <goals>
                  <goal>shade</goal>
                </goals>
                <configuration>
                  <transformers>
                    <transformer
                      implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                      <mainClass>hello.HelloWorld</mainClass>
                    </transformer>
                  </transformers>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </project>
    

    参考:  http://spring.io/guides/gs/maven/

    http://www.vineetmanohar.com/2009/11/3-ways-to-run-java-main-from-maven/

  • 相关阅读:
    scrollLeft、offsetLeft、clientLeft、clientHeight区分
    表格斜线
    td里的所有STYLE
    对输入框输入的数字进行格式控制,是很实用的效果
    MSComm控件使用详解
    如何用javascripr动态添加table?
    TeeChart的安装 delphi7
    DELPHI 字符串分割处理
    转正则表达式 简单
    求解:js函数在预编译期间的谜 简单
  • 原文地址:https://www.cnblogs.com/diegodu/p/5923740.html
Copyright © 2020-2023  润新知