iT邦幫忙

2025 iThome 鐵人賽

0
Software Development

我們與Maven的距離系列 第 32

Day31 - Converting a Java Project into a Maven Project

  • 分享至 

  • xImage
  •  

前言

作為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

  1. ./idea/dataSources.xml可以知道它使用的是MYSQL資料庫,使用jdbc4.0的driver
  2. ./idea/libraries/javax_transaction_api_1_2.xml可以知道它使用的是JTA 1.2的技術
  3. ./idea/libraries/JBoss_Weld_2_0_3.xml可以知道它CDI的實現使用JBoss Weld 2.0.3的技術
  4. ./idea/libraries/JPA_2_0_2_0.xml.xml可以知道它CDI的實現使用JPA2.0的技術
  5. web/WEB-INF/faces-config.xml可以知道前端技術使用JSF
  6. Resources/META-INFO/persistence.xml可以知道DB透JNDI存取Server上的Datasource,並且使用eclipselink作為JPA的實作
  7. misc.xml中發現他是使用jdk 1.8
  8. BookSearch.iml中提供了很多套件相依的資訊,並知道他是使用payara application server

https://ithelp.ithome.com.tw/upload/images/20251016/201280848CeeE6KaQN.png

創建web專案

我們使用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

調整pom

  <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套件已經下載不了
https://ithelp.ithome.com.tw/upload/images/20251016/20128084ZblBJWW7qt.png

替換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
https://ithelp.ithome.com.tw/upload/images/20251016/20128084pmICPu11W6.png
啟動payara,記得開一個console設定java_home為jdk 1.8的再執行bin/asadmin.bat
https://ithelp.ithome.com.tw/upload/images/20251016/20128084sfRxeHhJB6.png
點選Deployan Application
https://ithelp.ithome.com.tw/upload/images/20251016/20128084K2NSugdc7s.png
部署war失敗,需於application server設定datasource
https://ithelp.ithome.com.tw/upload/images/20251016/20128084d7JJCNMO4N.png
設定datasource
重新佈署
測試畫面
https://ithelp.ithome.com.tw/upload/images/20251016/2012808409wn5z8NH1.png

Reference


上一篇
Day30 - Visual Studio Code Integration with Maven
系列文
我們與Maven的距離32
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言