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目录

  • 相关阅读:
    codeforces 814B An express train to reveries
    codeforces 814A An abandoned sentiment from past
    codeforces 785D D. Anton and School
    codeforces 785C Anton and Fairy Tale
    codeforces 791C Bear and Different Names
    AOP详解
    Spring集成JUnit测试
    Spring整合web开发
    IOC装配Bean(注解方式)
    IOC装配Bean(XML方式)
  • 原文地址:https://www.cnblogs.com/liuyitan/p/13214886.html
Copyright © 2011-2022 走看看