zoukankan      html  css  js  c++  java
  • Maven篇----07 如何将普通java项目转换为maven项目

    本文使用idea,Eclipse也类似

    0. 为何要使用maven?

    公司项目目前遇到的问题:

    1. 版本管理混乱
      版本多的时候,出现问题难以定位,为问题的排查和解决增加了很大的难度

    2. 项目过于复杂, 层次结构不够清晰,显得很臃肿,
      不利于新同事理解业务

    3. 拉取项目代码时,文件很大下载慢
      在下载代码的同时,要拉取几百兆的依赖包

    4. 容易出现jar包冲突或者是缺少相应的依赖jar包
      随着需要的jar包越来越多, 每次引入jar包也需要小心翼翼, 说不准什么时候就会造成jar包冲突,
      而且也很容易造成某个jar包依赖的jar包没有引入而导致整个项目跑不起来

    基于以上, 我们引入了maven

    1. 导入项目并新建pom.xml文件

    鼠标右键: File -> open -> 选择项目路径;在项目的根目录下创建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/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>com.isoftstone.core</groupId>
        <artifactId>isc</artifactId>
        <packaging>war</packaging>
        <version>1.0.0-SNAPSHOT</version>
        <name>isc_env_dev</name>
        <dependencies>
    
    
        </dependencies>
        <build>
            <finalName>isc</finalName>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.1</version>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                        <encoding>UTF-8</encoding>
                    </configuration>
                </plugin>
    
    
            </plugins>
        </build>
    </project>
    

    2. 按照maven项目目录格式创建目录结构

    这里有以下两个关键目录:
    a1. Java类文件标准目录: src/main/java
    a2. 资源文件(配置)标准目录: src/main/resources

    注意:目录需要标记为对应的目录结构(选中目录右键 Mark Directory as -> Sources Root (或Resources Root))

    3. 生成maven项目依赖,并导入依赖

    可以手动添加,但是我们的项目动辄上百个依赖包。
    这里推介用大佬写好的依赖生成的工具类实现,该工具类需要用到下面的一些工具类,因此,请先将下面的依赖项复制到pom.xml文件中。

    <dependency>
        <groupId>org.dom4j</groupId>
        <artifactId>dom4j</artifactId>
        <version>2.1.0</version>
    </dependency>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.47</version>
    </dependency>
    <dependency>
        <groupId>org.jsoup</groupId>
        <artifactId>jsoup</artifactId>
        <version>1.8.3</version>
    </dependency>
    

    依赖生成工具类代码如下,源地址请移步,使用方法是直接将该工具类添加到项目中,其中“lib”是您的jar文件的存放目录的路径:

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.util.jar.JarInputStream;
    import java.util.jar.Manifest;
     
    import org.dom4j.Element;
    import org.dom4j.dom.DOMElement;
    import org.jsoup.Jsoup;
    import org.jsoup.nodes.Document;
     
    import com.alibaba.fastjson.JSONObject;
     
    public class MakePomFromJars {
     
    	public static void main(String[] args) throws FileNotFoundException, IOException {
    		Element dependencys = new DOMElement("dependencies");
    		File dir = new File("lib");
    		for (File jar : dir.listFiles()) {
    			JarInputStream jis = new JarInputStream(new FileInputStream(jar));
    			Manifest mainmanifest = jis.getManifest();
    			jis.close();
    			if (mainmanifest == null) {
    				System.err.println(jar.getName());
    				continue;
    			}
    			String bundleName = mainmanifest.getMainAttributes().getValue("Bundle-Name");
    			String bundleVersion = mainmanifest.getMainAttributes().getValue("Bundle-Version");
    			Element ele = null;
     
    			StringBuffer sb = new StringBuffer(jar.getName());
    			if (bundleName != null) {
    				bundleName = bundleName.toLowerCase().replace(" ", "-");
    				sb.append(bundleName + "	").append(bundleVersion);
    				ele = getDependices(bundleName, bundleVersion);
    				// System.out.println(sb.toString());
    				// System.out.println(ele.asXML());
    			}
    			if (ele == null || ele.elements().size() == 0) {
    				bundleName = "";
    				bundleVersion = "";
    				String[] ns = jar.getName().replace(".jar", "").split("-");
    				for (String s : ns) {
    					if (Character.isDigit(s.charAt(0))) {
    						bundleVersion += s + "-";
    					} else {
    						bundleName += s + "-";
    					}
    				}
    				if (bundleVersion.endsWith("-")) {
    					bundleVersion = bundleVersion.substring(0, bundleVersion.length() - 1);
    				}
    				if (bundleName.endsWith("-")) {
    					bundleName = bundleName.substring(0, bundleName.length() - 1);
    				}
    				ele = getDependices(bundleName, bundleVersion);
    				sb.setLength(0);
    				sb.append(bundleName + "	").append(bundleVersion);
    				// System.out.println(sb.toString());
    				// System.out.println(ele.asXML());
    			}
    			ele = getDependices(bundleName, bundleVersion);
    			if (ele.elements().size() == 0) {
    				ele.add(new DOMElement("groupId").addText("not find"));
    				ele.add(new DOMElement("artifactId").addText(bundleName));
    				ele.add(new DOMElement("version").addText(bundleVersion));
    				System.out.println(
    						sb.toString() + " not find, please visit https://mvnrepository.com/ to get more info.");
    			}
    			dependencys.add(ele);
    			// System.out.println();
    		}
    		System.out.println(dependencys.asXML());
    	}
     
    	public static Element getDependices(String key, String ver) {
    		Element dependency = new DOMElement("dependency");
    		// 设置代理
    		// System.setProperty("http.proxyHost", "127.0.0.1");
    		// System.setProperty("http.proxyPort", "8090");
    		try {
    			String url = "http://search.maven.org/solrsearch/select?q=a%3A%22" + key + "%22%20AND%20v%3A%22" + ver
    					+ "%22&rows=3&wt=json";
    			Document doc = Jsoup.connect(url).ignoreContentType(true).timeout(30000).get();
    			String elem = doc.body().text();
    			JSONObject response = JSONObject.parseObject(elem).getJSONObject("response");
    			if (response.containsKey("docs") && response.getJSONArray("docs").size() > 0) {
    				JSONObject docJson = response.getJSONArray("docs").getJSONObject(0);
    				Element groupId = new DOMElement("groupId");
    				Element artifactId = new DOMElement("artifactId");
    				Element version = new DOMElement("version");
    				groupId.addText(docJson.getString("g"));
    				artifactId.addText(docJson.getString("a"));
    				version.addText(docJson.getString("v"));
    				dependency.add(groupId);
    				dependency.add(artifactId);
    				dependency.add(version);
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		return dependency;
    	}
    }
    

    运行结果:

    使用时,只需要将运行结果字符串复制到pom.xml文件中。

    注意:
    项目依赖jar一般有三类,一类是公共jar,maven官网可以查到;第二类是公司自己的jar,第三类是第三方jar
    a1. 当遇到not find,且是公共jar时,可以自己到maven官网上核实。
    a2. 当遇到not find且不是公共jar,或者红色不识别的,就是自有的一些jar。如果公司有搭建私服的需要把这些jar管理起来;否则可作为外部jar在pom中引入

    4. 对项目进行编译打包

    1. 项目上右键 Add Framework Support,选择maven,点击OK。在项目右侧显示MAVEN窗口
    2. 接下来执行mvn clean install 对项目进行编译

    5. 删除多余的目录

    打包编译成功之后,就可以把不必要的目录干掉了! 主要是bin目录和lib目录

  • 相关阅读:
    dragloader.js帮助你在页面原生滚动下实现Pull Request操作
    移动Web单页应用开发实践——实现Pull to Request(上/下拉请求操作)
    【转】移动Web单页应用开发实践——页面结构化
    前端网址收集!Amazing! 神奇!
    前端代码书写规范
    扫描工具 分析
    backtrack5渗透 笔记
    Sqlmap注入技巧集锦
    nmap 高级扫描用法
    小温谈数据库优化--数据设计篇(转)
  • 原文地址:https://www.cnblogs.com/liuyitan/p/13214886.html
Copyright © 2011-2022 走看看