#综述 本文演示了用Maven编译Java项目
#需要
- 时间:15分钟
- 文本编辑器或者IDE
- JDK 6 或者更高版本
#创建项目 本例主要为了展示Maven,所以Java的项目力求简单。
#创建项目结构 选择一个项目目录,在 *nix系统上使用下面语句
mkdir -p src/main/java/hello
window下使用命令
mkdir src\main\java\hello
创建如下结构:
└── src
 └── main
     └── java
         └── hello
在
src/main/java/hello目录下创建Java文件HelloWorld.java和 Greeter.javasrc/main/java/hello/HelloWorld.javapackage hello;
public class HelloWorld {
    public static void main(String[] args) {
        Greeter greeter = new Greeter();
        System.out.println(greeter.sayHello());
    }
}
src/main/java/hello/Greeter.javapackage hello;
public class Greeter {
    public String sayHello() {
        return "Hello world!";
    }
}
现在项目完成,可以用Maven编译了。有关Maven的安装,可以参考Apache Maven 3.1.0 安装、部署、使用
#定义简单的Maven编译 首先,在项目的根目录下创建一个Maven项目定义文件
pom.xml,该文件主要是说明项目的名称、版本和依赖库pom.xml
<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>
除了 元素可选外,其他的元素是构成 
pom.xml 文件的最基本的元素了。它包括以下几个项目的配置:- :POM 模块版本(通常是4.0.0). 
- :项目所属的组织编号,通常用域名 
- 项目的名称(比如,JAR或者WAR的名称) 
- 项目编译的版本号 
- 项目打包形式,jar或者war 
#编译Java代码 运行下面语句编译
mvn compile
编译完成的
.class文件将会出现在target/classes目录下.如下图 

运行项目:
mvn exec:java -Dexec.mainClass="hello.HelloWorld"
输出如下: 

如果不想直接运行
.class文件,可以将其打包:mvn package
打包完成后,会在 和 组成。比如本例,将会根据  
target目录下生成一个JAR文件,文件名由pom.xml生成gs-maven-0.1.0.jar
 如果你想安装您的项目的JAR文件到本地Maven仓库,那么你应该调用下面语句:
 如果你想安装您的项目的JAR文件到本地Maven仓库,那么你应该调用下面语句:mvn install
此时,你的项目代码将会经过编译、测试、打包并拷贝到本地依赖库,提供给其他项目引用。
以上例子源码的地址https://github.com/waylau/maven-demo中的demo1
说到项目依赖,下面说下
声明依赖
#声明依赖 上面的例子比较简单,没有用到其他库。但是真实的项目可能会引用(依赖)到很多其他库。
下面例子,依赖了
Joda Time的库。
修改
src/main/java/hello/HelloWorld.javapackage 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将会报错,因为没有声明依赖。在 <dependencies>
    <dependency>
        <groupId>joda-time</groupId>
        <artifactId>joda-time</artifactId>
        <version>2.2</version>
    </dependency>
</dependencies>

这段内容就声明了项目的依赖。每个依赖节点都由三个子节点组成: 
- : 该依赖库所属的组织名称 
- : 依赖的库名 
- : 依赖的库版本 
在POM 4中, 中还引入了 ,它主要管理依赖的部署。目前 可以使用5个值:   
- compile,缺省值,适用于所有阶段,会随着项目一起发布。
- provided,类似compile,期望JDK、容器或使用者会提供这个依赖。如servlet.jar。
- runtime,只在运行时使用,如JDBC驱动,适用运行和测试阶段。
- test,只在测试时使用,用于编译和运行测试代码。不会随项目发布。
- system,类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。
现在你运行
mvn compile或者mvn package,Maven会自动下载相关依赖。
完整的
pom.xml
<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>
    
    <dependencies>
        <dependency>
            <groupId>joda-time</groupId>
            <artifactId>joda-time</artifactId>
            <version>2.2</version>
        </dependency>
    </dependencies>
    
    <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
 
 
No comments:
Post a Comment