作為Developer難免會遇到老舊專案未使用Maven或Gradle進行套件管理,在前面這麼多天的日子裡我們學習了充足的Maven知識,就讓我們來嘗試看看將老舊專案修改為Maven專案吧
本日重構專案是從Github找的一個JavaEE專案,連結如下:https://github.com/Numbedme/Book
| BookSearch.iml
|
+---.idea
| | compiler.xml
| | dataSources.ids
| | dataSources.local.xml
| | dataSources.xml
| | misc.xml
| | modules.xml
| | workspace.xml
| |
| +---artifacts
| | BookSearch_war_exploded.xml
| |
| +---copyright
| | profiles_settings.xml
| |
| \---libraries
| javax_transaction_api_1_2.xml
| JBoss_Weld_2_0_3.xml
| JPA_2_0_2_0.xml
|
+---lib
| cdi-api-javadoc.jar
| cdi-api-sources.jar
| cdi-api.jar
| javax.persistence.jar
| javax.transaction-api.jar
| weld-api-javadoc.jar
| weld-api-sources.jar
| weld-api.jar
| weld-core-impl-javadoc.jar
| weld-core-impl-sources.jar
| weld-core-impl.jar
| weld-core-javadoc.jar
| weld-core-jsf-javadoc.jar
| weld-core-jsf-sources.jar
| weld-core-jsf.jar
| weld-core-sources.jar
| weld-core.jar
| weld-se-core-javadoc.jar
| weld-se-core-sources.jar
| weld-se-core.jar
| weld-se-sources.jar
| weld-se.jar
| weld-servlet-core-javadoc.jar
| weld-servlet-core-sources.jar
| weld-servlet-core.jar
| weld-servlet-javadoc.jar
| weld-servlet-sources.jar
| weld-servlet.jar
| weld-spi-javadoc.jar
| weld-spi-sources.jar
| weld-spi.jar
|
+---out
| +---artifacts
| | \---BookSearch_war_exploded
| | | book.xhtml
| | | index.xhtml
| | | layout.xhtml
| | |
| | \---WEB-INF
| | | beans.xml
| | | faces-config.xml
| | | web.xml
| | |
| | +---classes
| | | +---com
| | | | \---numbedme
| | | | +---ejb
| | | | | AuthorService.class
| | | | | BookService.class
| | | | | CommonAuthorEJB.class
| | | | | CommonEJB.class
| | | | | LocalAuthorEJB.class
| | | | | LocalBookEJB.class
| | | | |
| | | | +---interceptor
| | | | | SimpleLogger.class
| | | | |
| | | | +---model
| | | | | Author.class
| | | | | Book.class
| | | | |
| | | | \---ui
| | | | BookController.class
| | | |
| | | \---META-INF
| | | persistence.xml
| | |
| | \---lib
| | javax.persistence.jar
| |
| \---production
| \---BookSearch
| +---com
| | \---numbedme
| | +---ejb
| | | AuthorService.class
| | | BookService.class
| | | CommonAuthorEJB.class
| | | CommonEJB.class
| | | LocalAuthorEJB.class
| | | LocalBookEJB.class
| | |
| | +---interceptor
| | | SimpleLogger.class
| | |
| | +---model
| | | Author.class
| | | Book.class
| | |
| | \---ui
| | BookController.class
| |
| \---META-INF
| persistence.xml
|
+---resource
| \---META-INF
| persistence.xml
|
+---src
| \---com
| \---numbedme
| +---ejb
| | AuthorService.java
| | BookService.java
| | CommonAuthorEJB.java
| | CommonEJB.java
| | LocalAuthorEJB.java
| | LocalBookEJB.java
| |
| +---interceptor
| | SimpleLogger.java
| |
| +---model
| | Author.java
| | Book.java
| |
| \---ui
| BookController.java
|
\---web
| book.xhtml
| index.xhtml
| layout.xhtml
|
\---WEB-INF
beans.xml
faces-config.xml
web.xml
./idea/dataSources.xml可以知道它使用的是MYSQL資料庫,使用jdbc4.0的driver./idea/libraries/javax_transaction_api_1_2.xml可以知道它使用的是JTA 1.2的技術./idea/libraries/JBoss_Weld_2_0_3.xml可以知道它CDI的實現使用JBoss Weld 2.0.3的技術./idea/libraries/JPA_2_0_2_0.xml.xml可以知道它CDI的實現使用JPA2.0的技術web/WEB-INF/faces-config.xml可以知道前端技術使用JSFResources/META-INFO/persistence.xml可以知道DB透JNDI存取Server上的Datasource,並且使用eclipselink作為JPA的實作misc.xml中發現他是使用jdk 1.8BookSearch.iml中提供了很多套件相依的資訊,並知道他是使用payara application server
我們使用vscode先透過maven創建一個web專案以BookSearch命名,並將github抓取下來的相關程式放置到對應的位置
+---src
| \---main
| +---java
| | \---com
| | \---numbedme
| | +---ejb
| | +---interceptor
| | +---model
| | \---ui
| +---resources
| | \---META-INF
| \---webapp
| \---WEB-INF
\---target
\---classes
+---com
| \---numbedme
| +---ejb
| +---interceptor
| +---model
| \---ui
\---META-INF
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<!-- Version Properties -->
<javaee.version>8.0</javaee.version>
<jsf.version>2.3.14</jsf.version>
<weld.version>3.1.7.Final</weld.version>
<!-- <hibernate.version>5.4.32.Final</hibernate.version> -->
<eclipselink.version>3.0.3</eclipselink.version>
<mysql.version>8.0.33</mysql.version>
</properties>
<dependencies>
<!-- Java EE API -->
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>${javaee.version}</version>
<scope>provided</scope>
</dependency>
<!-- JSF Implementation (if not provided by server) -->
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.faces</artifactId>
<version>${jsf.version}</version>
<scope>provided</scope>
</dependency>
<!-- CDI Implementation -->
<dependency>
<groupId>org.jboss.weld</groupId>
<artifactId>weld-core-impl</artifactId>
<version>${weld.version}</version>
<scope>provided</scope>
</dependency>
<!-- JPA Implementation (if using Hibernate) -->
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>eclipselink</artifactId>
<version>${eclipselink.version}</version>
</dependency>
<!-- MySQL JDBC Driver -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
</dependencies>
測試maven build是否ok,發現glassfish提供的JSF套件已經下載不了
替換JSF
<!-- https://mvnrepository.com/artifact/jakarta.faces/jakarta.faces-api -->
<dependency>
<groupId>jakarta.faces</groupId>
<artifactId>jakarta.faces-api</artifactId>
<version>${jsf.version}</version>
</dependency>
測試mvn package,結果ok
啟動payara,記得開一個console設定java_home為jdk 1.8的再執行bin/asadmin.bat
點選Deployan Application
部署war失敗,需於application server設定datasource
設定datasource
重新佈署
測試畫面