运行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包。