1、首先,確保eclipse中已經(jīng)配置了maven,如下圖:
2、New-Project-MavenProject...如下圖,選擇create a simple project,原因父項目需要建立的packaging為POM,子項目建立的packaging為jar或者war,勾選此處,在下一步中可以選擇packaging:
3、選擇打包方式
4、創(chuàng)建子工程,New-Project-Maven Module,再次提醒,父項目的packaging選擇POM,子項目選擇Jar或者war,順便說一句,一般來說,要創(chuàng)建在tomcat里運行的項目,應該是要創(chuàng)建war,比如本文說的service子項目和web子項目,應該是創(chuàng)建成war,但是有例外是,如果要創(chuàng)建spring boot微服務項目,因為spring boot采用的都是富jar形式,就需要所有的子項目都為jar,這僅僅是個人理解,具體按照自己的需求建立。
5、選擇子工程的打包方式,這里設置為jar
6、寫到此時,已經(jīng)創(chuàng)建完成了,我們可以看一下項目架構(gòu)
7、我們把整個項目(父項目)上打包,編譯運行,再看一下項目架構(gòu):
8、我們可以在DemoParent-Son2中引用項目DemoParent-Son1,直接在pom文件中加入依賴即可。
- <dependencies>
- <dependency>
- <groupId>com.nancy</groupId>
- <artifactId>DemoParent-Son1</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- <type>jar</type>
- </dependency>
- </dependencies>
這樣,在子項目DemoParent-Son2中就能直接調(diào)用子項目DemoParent-Son1中的類。
注意:子工程之間的引用:子工程若是web項目(對應的自動達成的就是war包),可以引用子工程是java項目的工程。但是子工程是java項目卻不能引用子工程是web項目的工程。
9、寫到此時,項目已經(jīng)告一段落了,但是小編基于需求,又嘗試了一下maven的子項目war與war之間的引用。發(fā)現(xiàn)也是可以的。我們再新建一個web子工程DemoParent-Son3,在pom文件中引入子項目DemoParent-Son2,配置文件如下:
- <?xml version='1.0'?>
- <project xsi:schemaLocation='http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd' xmlns='http://maven.apache.org/POM/4.0.0'
- xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>com.nancy</groupId>
- <artifactId>DemoParent</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- </parent>
- <artifactId>DemoParent-Son3</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- <packaging>war</packaging>
- <dependencies>
- <dependency>
- <groupId>com.nancy</groupId>
- <artifactId>DemoParent-Son2</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- <type>war</type>
- </dependency>
- </dependencies>
- <build>
- <finalName>DemoParent-Son3</finalName>
- <!-- 配置中有點說明下:把jar包自動拷貝到web-inf目錄地下,這個搞web開發(fā)都懂是為什么了 -->
- <plugins>
- <plugin>
- <artifactId>maven-antrun-plugin</artifactId>
- <executions>
- <execution>
- <id>copy-lib-src-webapps</id>
- <phase>package</phase>
- <configuration>
- <tasks>
- <delete dir='WebContent/WEB-INF/lib' />
- <copy todir='WebContent/WEB-INF/lib'>
- <fileset dir='target/${artifactId}/WEB-INF/lib'>
- <include name='*' />
- </fileset>
- </copy>
- </tasks>
- </configuration>
- <goals>
- <goal>run</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
- </plugins>
- </build>
- </project>
- <build>
- <plugins>
- <plugin>
- <artifactId>maven-war-plugin</artifactId>
- <configuration>
- <attachClasses>true</attachClasses>
- </configuration>
- </plugin>
- <plugins>
- <build>
- <dependencies>
- <dependency>
- <groupId>com.nancy</groupId>
- <artifactId>DemoParent-Son2</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- <type>jar</type>
- <classifier>classes</classifier>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>com.nancy</groupId>
- <artifactId>DemoParent-Son2</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- <type>war</type>
- </dependency>
- </dependencies>
可以看到,DemoParent-Son3項目用DemoParent-Son2 WAR創(chuàng)建最終的Web歸檔文件,出于編譯需要,還使用了DemoParent-Son2的類(打包在JAR里)。我們將屬性classifier設置為classes,以此定義該從倉庫中選擇哪個工件。將scope設置為provided,則是告訴Maven只在編譯時需要該工件,運行時則從其他地方獲得?!捌渌胤健碑斎痪褪侵窪emoParent-Son3項目的WAR工件,WAR插件會將WAR和JAR合并在一起?,F(xiàn)在已經(jīng)正確配置了依賴關系,那我們就開始測試一下。- public class Test {
- public static void main(String[] args) {
- Student s = new Student();
- s.setName('aaaa');
- System.out.println(s.getName() '1111111');
- }
- }
源代碼鏈接https://pan.baidu.com/s/13baE0YjgbEGbM263MRWb5g
提取碼4y45