美文网首页
第一个Maven项目

第一个Maven项目

作者: 黑色小核 | 来源:发表于2017-04-22 23:07 被阅读212次

    新建Maven工程

    建目录无疑是个烦人的活儿,万幸Maven提供了一种快速建立工程目录的方法,使用该方法可以快速生成一个标准的工程目录结构。

    在命令行下输入以下命令,注意修改参数以适应自己的工程。

    mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
    

    生成的目录如下:

    my-app
    |-- pom.xml
    `-- src
        |-- main
        |   `-- java
        |       `-- com
        |           `-- mycompany
        |               `-- app
        |                   `-- App.java
        `-- test
            `-- java
                `-- com
                    `-- mycompany
                        `-- app
                            `-- AppTest.java
    

    src/main/java中是工程源码,src/test/java中是测试源码。

    也许你搞不清楚如何填写之前那条命令的参数。没关系,Maven还提供了交互式的配置方式。你只需要输入mvn archetype:generate命令即可。接下来只要根据提示Next就好。

    到此为止,我们的工程目录和pom.xml都生成好了,下一步就可以编写主程序代码了。

    编写主代码并编译

    hello/src/main/java/com/semonx/app下新建一个Hello.java,删除原来的java文件。另外,这个目录是我根据我的项目生成的。

    Hello.java中编写如下代码:

    package com.semonx.app;
    
    /**
     * Hello world!
     *
     */
    public class Hello 
    {
        public String sayHello()
        {
            return "Hello Maven!";
        }
    
        public static void main( String[] args )
        {
            System.out.println( new Hello().sayHello() );
        }
    }
    

    hello目录下,通过命令行执行mvn clean compile命令编译源码。

    编译成功后,在hello/target/classes/com/semonx/app下可以看到生成的Hello.class文件。在hello/target/classes下执行java com.semonx.app.Hello命令运行class文件,可以看到命令行输出了Hello Maven!

    .class文件已经成功生成,下一步我们将通过Maven对代码进行单元测试。

    编写测试代码

    进入hello/src/test/java/com/semonx/app,删除原来的java文件,新建HelloTest.java,在HelloTest.java中编写测试代码如下:

    package com.semonx.app;
    
    import static org.junit.Assert.assertEquals;
    import org.junit.Test;
    
    /**
     * Unit test for simple Hello.
     */
    public class HelloTest 
    {
        @Test
        public void testSayHello()
        {
            Hello hello = new Hello();
            String result = hello.sayHello();
            assertEquals("Hello Maven!", result);
        }
    }
    

    然后在hello目录下执行mvn clean test命令进行测试。

    如果遇到不支持注解的情况请在pom.xml中加入如下配置:

    <project>
    ...
        <build>   
            <plugins>   
              <plugin>   
                <groupId>org.apache.maven.plugins</groupId>   
                <artifactId>maven-compiler-plugin</artifactId>   
                <configuration>   
                  <source>1.5</source>   
                  <target>1.5</target>   
                </configuration>   
              </plugin>   
            </plugins>   
        </build> 
    ...
    </project>
    

    打包和安装

    打包

    打包十分简单,在hello目录下执行mvn clean package命令打包即可。

    打包完成后就可以在hello/target下看到生成的hello-1.0-SNAPSHOT.jar文件。

    安装

    Maven可以通过安装命令把生成的jar包安装到本地仓库中。安装命令也很简单,在hello目录下执行mvn clean install命令安装即可。

    安装成功后,在用户目录下的.m2\repository\com\semonx\app\hello\1.0-SNAPSHOT中就能找到项目的jar包。

    运行

    找到生成的jar包,使用压缩软件打开,查看META-INF/MANIFEST.MF文件内容如下:

    Manifest-Version: 1.0
    Archiver-Version: Plexus Archiver
    Built-By: Semon
    Created-By: Apache Maven 3.5.0
    Build-Jdk: 1.8.0_77
    

    可以看到MANIFEST.MF中并没有Main-Class这一行,所以这样的jar包是无法直接运行的。为了生成可直接执行的jar文件,需要借助maven-shade-plugin插件。

    配置插件如下:

    <project>
      ...
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.0.0</version>
            <executions>
              <execution>
                <goals>
                  <goal>shade</goal>
                </goals>
                <configuration>
                  <transformers>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                      <manifestEntries>
                        <Main-Class>com.semonx.app.Hello</Main-Class>
                      </manifestEntries>
                    </transformer>
                  </transformers>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
      ...
    </project>
    

    这里需要注意的是<Main-Class>标签,它的值应该是main函数所在的类。

    然后我们重新打包,在hello下执行java -jar target\hello-1.0-SNAPSHOT.jar命令,可以看到命令行中输出了Hello Maven!

    相关文章

      网友评论

          本文标题:第一个Maven项目

          本文链接:https://www.haomeiwen.com/subject/chrezttx.html