万金流
初次使用博客园,目前感觉还不错。 不知不觉用了4年零4个月了,越来越喜欢博客园。

本文意在对比普通方式和maven方式,进行java项目开发的不同。

希望大家能看到项目管理的进步,体会到一个大型项目,是如何越来越方便地通过小项目组合而成的。(尤其需要很多jar包支持,包之间关系复杂的时候)

用的是最简单的例子,你可能几分钟就可以完成。完成之后,请多多体会。能想多深,就看自己了。


 

问题:我想写个程序,在控制台输出个字符串。输出什么字符串呢?这个由另一个同事完成,他将提供给我一个jar包,我得到什么,就输出什么。

ide:vscode

步骤1:jar包的开发。

那位同事新建了一个文件夹p2(意为project2,项目2),作为他项目的根目录。

在其中新建了文件夹hc,用来存放他的源文件。相应的,他的包(package)也就叫hc。

包中开发的类叫C2,因此对应的java 文件,就是C2.java。

 该类中只有一个方法“getSth()”,返回一个随意的字符串。

package hc;

public class C2 {
    public static String getSth()
    {
        return "abcdefg.";
    }
}

打包的过程就是生成jar的过程,各大ide都有自己的方法。vscode当中点击侧边栏的打包按钮即可。

 p2.jar被生成在p2文件夹下。(图片略)

步骤2:开发主项目。

新建文件夹p1作为项目主文件夹。lib文件夹放引用库文件,src文件夹放源文件。

把刚才的p2.jar复制到lib中,在src中新建主程序App.java。

   程序内容如下:

import hc.*;
public class App
{
    public static void main(String[] args) throws Exception
    {
        System.out.println(C2.getSth());
    }
}

运行结果正常,为“abcdefg.”。


使用maven完成上述工作。 

步骤1:jar包开发

新建项目p4: mvn -B archetype:generate -DgroupId=hc -DartifactId=p4 -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 ,包hc。注意:本例中,此命令运行在cmd里成功,ps里运行失败。

类为C3,方法还是getSth,内容不变。修改pom.xml文件,写对java版本,本jar版本设为1.0。

在“src\test\java”里的测试文件“TestApp.java”中编写测试内容:

 1 package hc;
 2 
 3 import static org.junit.Assert.assertTrue;
 4 
 5 import org.junit.Test;
 6 
 7 /**
 8  * Unit test for simple App.
 9  */
10 public class AppTest 
11 {
12     /**
13      * Rigorous Test :-)
14      */
15     @Test
16     public void shouldAnswerWithTrue()
17     {
18         assertTrue( "hahaha.".equals(C3.getSth()) );
19     }
20 }

主要是第18行,在测试中,期望返回“hahaha.”。不成立就报错。

使用 mvn test 进行测试。通过。

打包,成功(图中C2应为C3)

 安装进本地仓库,成功。可以在本地用户文件夹(c盘,用户,“你的用户名”)的“.m2”文件夹下看到内容。

 

步骤2:开发主项目。

maven新建项目p3,组织名(包)test。

在pom中添加依赖引用。

 App.java:
package test;
import hc.*;

/**
 * Hello world!
 *
 */
public class App 
{
    public static void main( String[] args )
    {
        System.out.println( C3.getSth() );
    }
}

清理项目,调试程序,正常。 图略。

如果你的IDE不听话,可以直接用maven的命令行运行项目。

进入项目文件夹(p3),执行命令: mvn exec:java -Dexec.mainClass="xxx.App" ,引号里是带包名的全限定类名。


maven常用命令及初学注意事项:

控制台乱码可以用“chcp 65001”切换到utf-8。

生成mvn项目: mvn -B archetype:generate -DgroupId=a0015 -DartifactId=test_main -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 

需要在对应的pom.xml里修改java版本。我的是

<maven.compiler.source>20</maven.compiler.source>
    <maven.compiler.target>20</maven.compiler.target>

 

打包:mvn package

放入本地仓库:mvn install

在别的项目里引用:

 <dependency>
      <groupId>a0015</groupId>
      <artifactId>test</artifactId>
      <version>1.0-SNAPSHOT</version>
    </dependency>

清理项目:mvn clean package

至此,可以正常使用。

关于maven的更多用法,感兴趣的话,可以去网上找。


附:eclipse下打jar包和使用

同样的内容,项目p2,包p2,类C2。注意,因为是功能类,新建类的时候不应该有Main

package p2;

public class C2 {
    public static String getSth()
    {
        return "hi";
    }
}

需要打包为jar

 选择jar文件

 勾选打包内容和位置

 确定完成打包。

在项目p1中,新建文件夹lib,把p2.jar复制进去。设置项目的参数

 在对应位置添加这个jar包

 确定关闭后,写主程序:

package p1;
import p2.*;
public class C1 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println(C2.getSth());
    }

}

编译运行出结果。

 

posted on 2023-09-15 22:43  万金流  阅读(834)  评论(0编辑  收藏  举报