经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 软件/图像 » Maven » 查看文章
这次弄一下maven 多模块项目,用vscode新建一下,便于管理项目
来源:cnblogs  作者:吃了上顿吃下顿  时间:2023/11/1 9:00:49  对本文有异议

首先 创建一个mvn项目, 直接在命令行执行, 原型生成:

  1. mvn archetype:generate

选一个maven quick start的template, 然后删除src和target文件夹

在pom.xml里面version 下面加上<packing>pom</packing> (maven 的三种打包方式: pom为打包依赖方式, jar文件,或者 war文件)

在此目录中再次执行mvn archetype:generate, 构件artifactId选为child1, 完成后自动在mvnparent目录的Pom中添加了<modules> 节点

再次在mvnparent目录执行mvn archetype:generate 生成child2项目, 会在mvnparent的pom.xml中添加child2的module, 把里面没用的build 节点都删掉

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <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">
  3. <modelVersion>4.0.0</modelVersion>
  4. <parent>
  5. <artifactId>mvnparent</artifactId>
  6. <groupId>org.caloch</groupId>
  7. <version>1.0-SNAPSHOT</version>
  8. </parent>
  9.  
  10. <artifactId>child2</artifactId>
  11. <packaging>jar</packaging>
  12.  
  13. <name>child2</name>
  14. <!-- FIXME change it to the project's website -->
  15. <url>http://www.example.com</url>
  16.  
  17. <properties>
  18. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  19. <maven.compiler.source>1.7</maven.compiler.source>
  20. <maven.compiler.target>1.7</maven.compiler.target>
  21. </properties>
  22.  
  23.  
  24.  
  25. </project>

mvnchild1引用了child2项目的pom.xml, 里面删除groupid和version两个,它们会继承parent, packaging改为jar

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6. <parent>
  7. <artifactId>mvnparent</artifactId>
  8. <groupId>org.caloch</groupId>
  9. <version>1.0-SNAPSHOT</version>
  10. </parent>
  11.  
  12. <artifactId>mvnchild1</artifactId>
  13. <packaging>jar</packaging>
  14.  
  15. <name>mvnchild1</name>
  16. <!-- FIXME change it to the project's website -->
  17. <url>http://www.example.com</url>
  18.  
  19. <properties>
  20. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  21. <maven.compiler.source>1.7</maven.compiler.source>
  22. <maven.compiler.target>1.7</maven.compiler.target>
  23. </properties>
  24.  
  25. <dependencies>
  26. <dependency>
  27. <groupId>junit</groupId>
  28. <artifactId>junit</artifactId>
  29. <version>4.11</version>
  30. <scope>test</scope>
  31. </dependency>
  32.  
  33. <dependency>
  34. <groupId>org.caloch</groupId>
  35. <artifactId>child2</artifactId>
  36. <version>${project.version}</version>
  37. </dependency>
  38.  
  39.  
  40. </dependencies>
  41.  
  42. </project>

 

 

  1. <?xml version="1.0" encoding="UTF-8" standalone="no"?>
  2. <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">
  3. <modelVersion>4.0.0</modelVersion>
  4.  
  5. <groupId>org.caloch</groupId>
  6. <artifactId>mvnparent</artifactId>
  7. <version>1.0-SNAPSHOT</version>
  8. <packaging>pom</packaging>
  9.  
  10. <name>mvnparent</name>
  11. <!-- FIXME change it to the project's website -->
  12. <url>http://www.example.com</url>
  13.  
  14. <properties>
  15. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  16. <maven.compiler.source>1.7</maven.compiler.source>
  17. <maven.compiler.target>1.7</maven.compiler.target>
  18. </properties>
  19.  
  20. <dependencies>
  21. <dependency>
  22. <groupId>junit</groupId>
  23. <artifactId>junit</artifactId>
  24. <version>4.11</version>
  25. <scope>test</scope>
  26. </dependency>
  27. </dependencies>
  28.  
  29. <modules> <module>mvnchild1</module>
  30. <module>child2</module>
  31. </modules>
  32. </project>

 将项目导入idea中可以调试, 运行为 java -cp "加上另外项目的class文件路径"

  1. D:\source\repos\mvn_multi_module\mvnparent\mvnchild1> java -cp "D:\source\repos\mvn_multi_module\mvnparent\mvnchild1\target\classes;D:\source\repos\mvn_multi_module\mvnparent\child2\target\classes;" child1.App

 mvn compile

mvn package

需要指定main class

指定时 java -jar xx.jar可以执行

不指定main class时, 使用java -cp xx.jar {maiclass} 来执行

构建, 在child1的pom里面添加build

  1. <build>
  2. <plugins>
  3.  
  4. <!--打包普通项目-->
  5. <plugin>
  6. <artifactId>maven-assembly-plugin</artifactId>
  7. <configuration>
  8. <!-- 可以指定打包的Main类,也可以不指定-->
  9. <!--指定了某个主类的话,使用: java -jar xxx.jar 参数 来执行-->
  10. <!--不指定主类的话使用:java -cp xxx.jar 类的路径 参数 来执行,注意这里需要手动指定执行类-->
  11. <!-- <archive>-->
  12. <!-- <manifest>-->
  13. <!-- &lt;!&ndash;这里要替换成jar包main方法所在类 &ndash;&gt;-->
  14. <!-- <mainClass>GetName</mainClass>-->
  15. <!-- </manifest>-->
  16. <!-- <manifestEntries>-->
  17. <!-- &lt;!&ndash;上面指定类的路径&ndash;&gt;-->
  18. <!-- <Class-Path>./src/main/java</Class-Path>-->
  19. <!-- </manifestEntries>-->
  20. <!-- </archive>-->
  21.  
  22. <descriptorRefs>
  23. <descriptorRef>jar-with-dependencies</descriptorRef>
  24. </descriptorRefs>
  25. </configuration>
  26. <executions>
  27. <execution>
  28. <id>make-assembly</id> <!-- this is used for inheritance merges -->
  29. <phase>package</phase> <!-- 指定在打包节点执行jar包合并操作 -->
  30. <goals>
  31. <goal>single</goal>
  32. </goals>
  33. </execution>
  34. </executions>
  35. </plugin>
  36.  
  37.  
  38.  
  39. </plugins>
  40. </build>

 

运行,注意要运行和dependency一起打包的jar才可以不需要额外添加另外一个包的class path, 否则还是要加class path -cp选项:

  1. cd D:\source\repos\mvn_multi_module\mvnparent\mvnchild1\target
  2. java -cp .\mvnchild1-1.0-SNAPSHOT-jar-with-dependencies.jar child1.App
  3. Hello util in child2

 关于引用两个jar,里面的包名和类名都相同的问题: 按搜索,只需要改变引用的顺序就会造成后一个覆盖前一个的结果

建好的项目文件在:

https://files.cnblogs.com/files/hualiu0/mvnparent.7z?t=1698752418&download=true

原文链接:https://www.cnblogs.com/hualiu0/p/17801039.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号