SpringBootマルチモジュールプロジェクトのアイデアを作成します。
まず、道の下のMavenプロジェクトをパッケージの3種類を理解します:
1.war
戦争のパッケージアイテムとしてパッケージ化するとTomcatを実行しているの下に配置することができます
2.jar
ジャーパッケージに使用することでパッケージ化されたjava -jar xxx.jar
実行する方法を、最も一般的なのはSpringBootプロジェクトです
3.pom
それだけでプロジェクトにパッケージ化され、依存関係の管理に使用され、直接実行することはできません。例えば、親に依存Springbootプロジェクトと長く、彼らは唯一の管理に依存しているため、ライブへのパッケージ化POMの方法に依存しています。
プロジェクトの作成を開始
それぞれのモジュールを作成するための3つの合計、lyn4everウェブ、lyn4everサービス、lyn4ever-DAO。このような単純なフレームワークを行うには
1.まず、親プロジェクトを作成します
1.1 springbootは、直接プロジェクト(アイテム課金あなたは原理を理解する便宜上、もちろん、通常のMavenプロジェクト缶、、)、何のニーズを作成します
このステップは、それだけに対応するバージョンを選択する必要があり、他の代替はオプションです
私たちはここにコードを書くことがないため、この項目1.2を削除するフォルダのsrcファイル
pom.xmlに追加1.3 <packaging>pom</packaging>
この1
2.第2のステップは、マウスの右ボタンでプロジェクトフォルダのちょうどルートフォルダに、新規作成 - >モジュール - > Mavenのプロジェクトを選択
- それは自動的に私たちのために、この依存性を(POM依存関係)の書き込み、あるいは自分自身を書き込みますので、プロジェクトフォルダのちょうどルートフォルダに作成さを持っているようにしてください。この時間有料気をつけていない右側の場合は、その親に依存選択にあなただけのmodulepackageを作成したボタンを選択
注選択は幸いなことに、デフォルトでは、ディスク・ディレクトリのフォルダにファイルを正しいと、ちょうど罰金をスキップします。
私たちのアイデアは、自動的にプロジェクト内の親ポンポンファイルに次の文を追加して
も見ることができ、プロジェクトの父がmodulepackageに依存しているだけで、このWebプロジェクトを作成しました
3.第3工程と、このWebプロジェクトが作成された、我々はspringboot開始クラス、書き込みにこれだけのプロジェクトを書き込むことにより、サブプロジェクトのエントリとしてこのプロジェクトには、他の人が書いていないだろう。
package cn.lyn4ever.web.boot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
- ウェブ層として、我々は依存性のspringboot-ウェブを導入しています
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
サービスのサブプロジェクトを作成します。4.
和上一个一样,new->module->maven然后写好名字.接着在web项目中添加这个service的依赖,在web中的pom.xml中添加如下依赖:
<dependency>
<groupId>cn.lyn4ever</groupId>
<artifactId>service</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
5.创建dao子项目
同样,也是创建子maven项目,但是这个dao层要连接数据库,我们就要引入mybatis和mysql相关依赖(由于我们最上一层用的是springboot依赖,所以完全可以引入mybatis依赖)。
- 这些相关依赖可以引入到modulepackage的pom文件中,也可以引入到子模块中。我个人建议引入到子模块中,因为它并不是所有的子模块通用的,但是还是要使用父工程来管理这些依赖,怎么办?那就使用dependencyManagement,如果不明白这个做法的原理的小伙伴,请戳dependencies与dependencyManagement的区别
- dao模块中的依赖
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
- service层要依赖dao层,请在service的pom中添加依赖
<dependency>
<groupId>cn.lyn4ever</groupId>
<artifactId>dao</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
在idea右边的maven管理中可以完全看到它们之间的依赖关系
6.工程已经创建好了,我们就开始与代码进行测试吧。
和我们通常写代码是一样的,web,service,dao层,请自行补全。(代码已上传到gitee,随时查看项目源代码地址)
7.进行测试
7.1写好代码后运行Application.main()时报错
说明@Service没有扫描到, 所以没有这个bean,在Application.java上添加扫描注解@ComponentScan("cn.lyn4ever")
上边错就是说明扫描到mapper,加上注解@MapperScan("cn.lyn4ever.dao")
几个说明:
- 如果创建Springboot项目时报错,说无法访问
https://start.spring.io,请看这里idea中使用Spring Initializr创建项目时报错
*最后启动这个项目(使用我们之前写的Application.mian)启动,使用浏览器访问成功.
8.最重要的部分,打包上线和多人协作的情况处理
8.1 打包上线:
首先,你要明白。我们这么折腾了好一会儿,到底做了个什么?
service和dao模块其实就是一个被依赖的项目,真正的项目是web这个模块。
所以,我们只需要打包web模块就可以了,但是web模块依赖service,service依赖dao。
- maven中的所谓的依赖,就是要在仓库中寻找依赖。所以我们要先将service和dao这两个模块install到本地maven仓库中(只有这样,在打包web模块时,才能正确找到依赖,先dao,再service)。
如果报错如下
------------------------------------------------------------------------
[ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:2.2.2.RELEASE:repackage (repackage) on project dao: Execution repackage of goal org.springframework.boot:spring-boot-maven-plugin:2.2.2.RELEASE:repackage failed: Unable to find main class -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginExecutionException
将父项目中的这段代码复制到web模块中,因为这上sprinboot项目打包的插件。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
当然,为了避免出现不必要的错误,我更建议直接对modulepackage这个父项目进行install
依次对dao和service执行了install后,可以在本地maven仓库中找到它们:
然后对web模块进行打包,打包完成后,会在它的target文件夹下生成jar文件,我们运行这上jar文件
java -jar web-0.0.1-SNAPSHOT.jar
然后这个项目就可以上线了。
8.2多人协作时
我们使用压缩包的方式打开上边这个打包好的jar包,可以在里边找到刚才的service和dao打包成的jar包
也就是说,在对we模块打包时,是将本地仓库中的maven仓库中的service和dao的jar包打包了进去,如果是多人协作的话,最好创建一个maven私服,这样就会更加方便
- 总结:
- 確かに多くのウェブサービス、DAOよりも実際には1、。正義名前を付けるときに知っている名前を参照してください行ってください。
- 2.ウェブ層に加えて、他のサブモジュールは、最終的には、JARパッケージ、Webパッケージ、瓶にこのパッケージを実行するための唯一の必要性にパッケージ化されています
- 3.パッケージングプロジェクトの父、すなわち、POMでなければなりません
<packaging>pom</packaging>