本文意在对比普通方式和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中添加依赖引用。
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()); } }
编译运行出结果。