zoukankan      html  css  js  c++  java
  • 使用maven编译Java项目

    摘要: 综述 本文演示了用Maven编译Java项目 需要 时间:15分钟 文本编辑器或者IDE JDK 6 或者更高版本 创建项目 本例主要为了展示Maven,所以Java的项目力求简单。 创建项目结构 选择一个项目目录,在 *nix系统上使用下面语句 mkdir -p src/main/java/he

    综述

    本文演示了用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目录下.如下图 编译Java代码

    class

    运行项目:

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

    输出如下: HelloWorld

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

    mvn package
    

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

    gs-maven-0.1.0.jar

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

    mvn install
    

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

    以上例子源码的地址https://github.com/waylau/maven-demo中的demo1

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

    声明依赖

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

    下面例子,依赖了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>
    

    运行项目:

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

    输出如下: 运行项目

    以上例子源码的地址https://github.com/waylau/maven-demo中的demo2

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

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

    原文:https://yq.aliyun.com/articles/46992

  • 相关阅读:
    sfs2x 连接 mongodb
    java websocket
    webstorm 4.0 注册码
    解决 sfs2 admin tool 找不到扩展
    window 注册表五大类
    opengl 学习第二日
    java google Protobuf
    扩展 java sencha touch PhonegapPlugin
    sencha touch2 kryonet socket phonegap 通信 作者:围城
    sencha touch2 layout 笔记
  • 原文地址:https://www.cnblogs.com/onetwo/p/7133226.html
Copyright © 2011-2022 走看看