kimown/kimown.github.io

运行maven项目打包的jar包

Opened this issue · 0 comments

我们平时开发web项目时,都是使用maven进行项目的管理,例如:外部jar包的依赖、测试和项目的打包上线,根据maven的配置文件web项目可以打包成war包,最后使用web服务器运行。例如但是在我自己开发的小项目时,需要使用maven管理一些必要的外部jar包,但是并不需要其它的东西,也就是说,运行代码的相关环境设置越少越好。
1、首先,使用命令创建一个简单的maven项目。

mvn archetype:generate -DgroupId=com.imooc -DartifactId=imooc -DarchetypeArtifactId=maven-archetype-quickstart  -DinteractiveMode=false


如果需要深入了解下maven,参考教程:http://www.cnblogs.com/yjmyzz/p/3495762.html,里面包含了各项命令的意义。
这是创建后的pom.xml文件

参考:http://www.yiibai.com/maven/maven_creating_project.html
2、修改pom.xml文件,加入依赖包,打成jar包。
这里我加入的是jsoup的maven依赖,地址:http://jsoup.org/download

    <dependency>
      <!-- jsoup HTML parser library @ http://jsoup.org/ -->
      <groupId>org.jsoup</groupId>
      <artifactId>jsoup</artifactId>
      <version>1.8.3</version>
    </dependency>

这里我写了一个爬虫程序,使用jsoup抓取网络资源,目的很简单,使用jsoup获取html资源后取得指定的DOM元素数据,不过这里写了一个循环,但是我估计代码运行肯定没有想象的那么顺利。

package com.imooc;


import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;


public class App {
    public static void main(String[] args) throws IOException{
        for(int i=5000;i<5200;i++){
            String url = "http://www.meizitu.com/a/"+i+".html";
            Document doc = Jsoup.connect(url).get();
            Elements elements = doc.select("#picture img");
            List<String> list= new ArrayList<String>();
            for(Element element:elements){
                list.add(element.attr("src"));
            }
            System.out.println("url="+url);
            System.out.println(list.toString());
            System.out.println();
            System.out.println();
        }
    }
}

运行命令:mvn clean install package ,最终在target目录下生成了一个jar包。

3、运行jar包。
java -cp imooc-1.0-SNAPSHOT.jar com.imooc.App

原因是打成的jar包并没有包含jsoup,它并不是独立可运行的。
参考:http://www.linuxidc.com/Linux/2015-02/112712.htm
4、修改pom.xml,打包参数

<build>
        <sourceDirectory>src/main/java</sourceDirectory>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <defaultLibBundleDir>lib</defaultLibBundleDir>
                    <source>1.5</source>
                    <target>1.5</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <classpathPrefix></classpathPrefix>
                            <mainClass>com.xx.xx.xx</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <id>copy</id>
                        <phase>install</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>
                                ${project.build.directory}
                            </outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>

参考:http://my.oschina.net/zimingforever/blog/266191
再次打包,再次运行。

这里可以看到它把jsoup的包也拉过来了。

运行结果:

完善下对以来报的管理,
http://stackoverflow.com/questions/2022032/building-a-runnable-jar-with-maven-2
http://www.mkyong.com/maven/how-to-create-a-jar-file-with-maven/
按照第二篇文章的说法,可以把所有依赖包统一放在target/dependency-jars/目录下。
也许可以使用jetty来运行war包中特定的jar包。