|
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
|
<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">
|
|
|
<modelVersion>4.0.0</modelVersion>
|
|
|
|
|
|
<groupId>com.smartlibrary</groupId>
|
|
|
<artifactId>slms</artifactId>
|
|
|
<version>1.0-SNAPSHOT</version>
|
|
|
<packaging>${project.packaging}</packaging>
|
|
|
|
|
|
<properties>
|
|
|
<maven.compiler.source>11</maven.compiler.source>
|
|
|
<maven.compiler.target>11</maven.compiler.target>
|
|
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
|
|
<spring.boot.version>2.7.5</spring.boot.version>
|
|
|
<project.packaging>jar</project.packaging>
|
|
|
|
|
|
<!-- SonarQube configuration is in sonar-project.properties -->
|
|
|
</properties>
|
|
|
|
|
|
<dependencies>
|
|
|
<!-- SQLite JDBC Driver -->
|
|
|
<dependency>
|
|
|
<groupId>org.xerial</groupId>
|
|
|
<artifactId>sqlite-jdbc</artifactId>
|
|
|
<version>3.36.0.3</version>
|
|
|
</dependency>
|
|
|
|
|
|
<!-- JUnit 4 for testing (legacy tests) -->
|
|
|
<dependency>
|
|
|
<groupId>junit</groupId>
|
|
|
<artifactId>junit</artifactId>
|
|
|
<version>4.13.2</version>
|
|
|
<scope>test</scope>
|
|
|
</dependency>
|
|
|
|
|
|
<!-- JUnit 5 for testing -->
|
|
|
<dependency>
|
|
|
<groupId>org.junit.jupiter</groupId>
|
|
|
<artifactId>junit-jupiter</artifactId>
|
|
|
<version>5.8.2</version>
|
|
|
<scope>test</scope>
|
|
|
</dependency>
|
|
|
|
|
|
<!-- JUnit Vintage Engine (to run JUnit 4 tests with JUnit 5) -->
|
|
|
<dependency>
|
|
|
<groupId>org.junit.vintage</groupId>
|
|
|
<artifactId>junit-vintage-engine</artifactId>
|
|
|
<version>5.8.2</version>
|
|
|
<scope>test</scope>
|
|
|
</dependency>
|
|
|
|
|
|
<!-- JUnit Platform Suite (for @Suite annotation) -->
|
|
|
<dependency>
|
|
|
<groupId>org.junit.platform</groupId>
|
|
|
<artifactId>junit-platform-suite-api</artifactId>
|
|
|
<version>1.8.2</version>
|
|
|
<scope>test</scope>
|
|
|
</dependency>
|
|
|
|
|
|
<!-- Mockito for testing -->
|
|
|
<dependency>
|
|
|
<groupId>org.mockito</groupId>
|
|
|
<artifactId>mockito-core</artifactId>
|
|
|
<version>4.6.1</version>
|
|
|
<scope>test</scope>
|
|
|
</dependency>
|
|
|
|
|
|
<!-- Mockito JUnit Jupiter integration -->
|
|
|
<dependency>
|
|
|
<groupId>org.mockito</groupId>
|
|
|
<artifactId>mockito-junit-jupiter</artifactId>
|
|
|
<version>4.6.1</version>
|
|
|
<scope>test</scope>
|
|
|
</dependency>
|
|
|
|
|
|
<!-- Logger (slf4j-simple only for CLI/GUI, excluded from Web) -->
|
|
|
<dependency>
|
|
|
<groupId>org.slf4j</groupId>
|
|
|
<artifactId>slf4j-api</artifactId>
|
|
|
<version>1.7.32</version>
|
|
|
</dependency>
|
|
|
|
|
|
<!-- Spring Boot for Web Application -->
|
|
|
<dependency>
|
|
|
<groupId>org.springframework.boot</groupId>
|
|
|
<artifactId>spring-boot-starter-web</artifactId>
|
|
|
<version>${spring.boot.version}</version>
|
|
|
</dependency>
|
|
|
|
|
|
<dependency>
|
|
|
<groupId>org.springframework.boot</groupId>
|
|
|
<artifactId>spring-boot-starter-thymeleaf</artifactId>
|
|
|
<version>${spring.boot.version}</version>
|
|
|
</dependency>
|
|
|
|
|
|
<!-- JavaFX for GUI Application -->
|
|
|
<dependency>
|
|
|
<groupId>org.openjfx</groupId>
|
|
|
<artifactId>javafx-controls</artifactId>
|
|
|
<version>17</version>
|
|
|
</dependency>
|
|
|
|
|
|
<dependency>
|
|
|
<groupId>org.openjfx</groupId>
|
|
|
<artifactId>javafx-fxml</artifactId>
|
|
|
<version>17</version>
|
|
|
</dependency>
|
|
|
</dependencies>
|
|
|
|
|
|
<build>
|
|
|
<plugins>
|
|
|
<plugin>
|
|
|
<groupId>org.apache.maven.plugins</groupId>
|
|
|
<artifactId>maven-compiler-plugin</artifactId>
|
|
|
<version>3.8.1</version>
|
|
|
<configuration>
|
|
|
<source>11</source>
|
|
|
<target>11</target>
|
|
|
</configuration>
|
|
|
</plugin>
|
|
|
<plugin>
|
|
|
<groupId>org.apache.maven.plugins</groupId>
|
|
|
<artifactId>maven-surefire-plugin</artifactId>
|
|
|
<version>3.0.0-M7</version>
|
|
|
<configuration>
|
|
|
<includes>
|
|
|
<include>**/*Test.java</include>
|
|
|
<include>**/*TestCase.java</include>
|
|
|
</includes>
|
|
|
<!-- 暂时排除有问题的测试类,待修复后移除 -->
|
|
|
<excludes>
|
|
|
<exclude>**/CLIApplicationTest.java</exclude>
|
|
|
<exclude>**/BookServiceTest.java</exclude>
|
|
|
<exclude>**/SMSNotificationTest.java</exclude>
|
|
|
<exclude>**/EmailNotificationTest.java</exclude>
|
|
|
</excludes>
|
|
|
</configuration>
|
|
|
</plugin>
|
|
|
<!-- Spring Boot Plugin for Web Application (默认跳过,仅在 web profile 中启用) -->
|
|
|
<plugin>
|
|
|
<groupId>org.springframework.boot</groupId>
|
|
|
<artifactId>spring-boot-maven-plugin</artifactId>
|
|
|
<version>${spring.boot.version}</version>
|
|
|
<configuration>
|
|
|
<skip>true</skip>
|
|
|
</configuration>
|
|
|
</plugin>
|
|
|
<!-- JavaFX Plugin for GUI Application -->
|
|
|
<plugin>
|
|
|
<groupId>org.openjfx</groupId>
|
|
|
<artifactId>javafx-maven-plugin</artifactId>
|
|
|
<version>0.0.8</version>
|
|
|
<configuration>
|
|
|
<mainClass>com.smartlibrary.gui.GUIApplication</mainClass>
|
|
|
</configuration>
|
|
|
</plugin>
|
|
|
<!-- Exec Plugin for CLI Application -->
|
|
|
<plugin>
|
|
|
<groupId>org.codehaus.mojo</groupId>
|
|
|
<artifactId>exec-maven-plugin</artifactId>
|
|
|
<version>3.1.0</version>
|
|
|
<configuration>
|
|
|
<mainClass>com.smartlibrary.cli.CLIApplication</mainClass>
|
|
|
</configuration>
|
|
|
</plugin>
|
|
|
<!-- JaCoCo Plugin for Code Coverage -->
|
|
|
<plugin>
|
|
|
<groupId>org.jacoco</groupId>
|
|
|
<artifactId>jacoco-maven-plugin</artifactId>
|
|
|
<version>0.8.10</version>
|
|
|
<executions>
|
|
|
<execution>
|
|
|
<id>prepare-agent</id>
|
|
|
<goals>
|
|
|
<goal>prepare-agent</goal>
|
|
|
</goals>
|
|
|
</execution>
|
|
|
<execution>
|
|
|
<id>report</id>
|
|
|
<phase>test</phase>
|
|
|
<goals>
|
|
|
<goal>report</goal>
|
|
|
</goals>
|
|
|
</execution>
|
|
|
</executions>
|
|
|
</plugin>
|
|
|
<!-- SonarQube Plugin -->
|
|
|
<plugin>
|
|
|
<groupId>org.sonarsource.scanner.maven</groupId>
|
|
|
<artifactId>sonar-maven-plugin</artifactId>
|
|
|
<version>3.10.0.2594</version>
|
|
|
</plugin>
|
|
|
</plugins>
|
|
|
</build>
|
|
|
|
|
|
<profiles>
|
|
|
<profile>
|
|
|
<id>cli</id>
|
|
|
<build>
|
|
|
<resources>
|
|
|
<resource>
|
|
|
<directory>src/main/resources</directory>
|
|
|
</resource>
|
|
|
<resource>
|
|
|
<directory>${project.basedir}</directory>
|
|
|
<includes>
|
|
|
<include>library.db</include>
|
|
|
</includes>
|
|
|
<targetPath>.</targetPath>
|
|
|
</resource>
|
|
|
</resources>
|
|
|
<plugins>
|
|
|
<plugin>
|
|
|
<groupId>org.apache.maven.plugins</groupId>
|
|
|
<artifactId>maven-shade-plugin</artifactId>
|
|
|
<version>3.5.0</version>
|
|
|
<executions>
|
|
|
<execution>
|
|
|
<phase>package</phase>
|
|
|
<goals>
|
|
|
<goal>shade</goal>
|
|
|
</goals>
|
|
|
<configuration>
|
|
|
<shadedArtifactAttached>true</shadedArtifactAttached>
|
|
|
<shadedClassifierName>cli-shaded</shadedClassifierName>
|
|
|
<createDependencyReducedPom>false</createDependencyReducedPom>
|
|
|
<transformers>
|
|
|
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
|
|
|
<mainClass>com.smartlibrary.cli.CLIApplication</mainClass>
|
|
|
</transformer>
|
|
|
<transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
|
|
|
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
|
|
|
<resource>META-INF/spring.handlers</resource>
|
|
|
</transformer>
|
|
|
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
|
|
|
<resource>META-INF/spring.schemas</resource>
|
|
|
</transformer>
|
|
|
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
|
|
|
<resource>META-INF/spring.factories</resource>
|
|
|
</transformer>
|
|
|
</transformers>
|
|
|
<filters>
|
|
|
<filter>
|
|
|
<artifact>*:*</artifact>
|
|
|
<excludes>
|
|
|
<exclude>META-INF/*.SF</exclude>
|
|
|
<exclude>META-INF/*.DSA</exclude>
|
|
|
<exclude>META-INF/*.RSA</exclude>
|
|
|
</excludes>
|
|
|
</filter>
|
|
|
</filters>
|
|
|
</configuration>
|
|
|
</execution>
|
|
|
</executions>
|
|
|
</plugin>
|
|
|
</plugins>
|
|
|
</build>
|
|
|
</profile>
|
|
|
|
|
|
<profile>
|
|
|
<id>gui</id>
|
|
|
<build>
|
|
|
<resources>
|
|
|
<resource>
|
|
|
<directory>src/main/resources</directory>
|
|
|
</resource>
|
|
|
<resource>
|
|
|
<directory>${project.basedir}</directory>
|
|
|
<includes>
|
|
|
<include>library.db</include>
|
|
|
</includes>
|
|
|
<targetPath>.</targetPath>
|
|
|
</resource>
|
|
|
</resources>
|
|
|
<plugins>
|
|
|
<!-- 使用 maven-dependency-plugin 复制依赖 -->
|
|
|
<plugin>
|
|
|
<groupId>org.apache.maven.plugins</groupId>
|
|
|
<artifactId>maven-dependency-plugin</artifactId>
|
|
|
<version>3.6.0</version>
|
|
|
<executions>
|
|
|
<execution>
|
|
|
<id>copy-dependencies</id>
|
|
|
<phase>package</phase>
|
|
|
<goals>
|
|
|
<goal>copy-dependencies</goal>
|
|
|
</goals>
|
|
|
<configuration>
|
|
|
<outputDirectory>${project.build.directory}/libs</outputDirectory>
|
|
|
<includeScope>runtime</includeScope>
|
|
|
<!-- 排除平台无关的 JavaFX JAR,只保留 Windows 版本 -->
|
|
|
<excludeArtifactIds>javafx-base,javafx-controls,javafx-graphics,javafx-fxml</excludeArtifactIds>
|
|
|
</configuration>
|
|
|
</execution>
|
|
|
</executions>
|
|
|
</plugin>
|
|
|
|
|
|
<!-- 使用 maven-jar-plugin 创建可执行 JAR -->
|
|
|
<plugin>
|
|
|
<groupId>org.apache.maven.plugins</groupId>
|
|
|
<artifactId>maven-jar-plugin</artifactId>
|
|
|
<version>3.3.0</version>
|
|
|
<configuration>
|
|
|
<archive>
|
|
|
<manifest>
|
|
|
<addClasspath>true</addClasspath>
|
|
|
<classpathPrefix>libs/</classpathPrefix>
|
|
|
<mainClass>com.smartlibrary.gui.GUIApplication</mainClass>
|
|
|
</manifest>
|
|
|
</archive>
|
|
|
</configuration>
|
|
|
</plugin>
|
|
|
|
|
|
|
|
|
</plugins>
|
|
|
</build>
|
|
|
</profile>
|
|
|
|
|
|
<!-- GUI Swing Profile - 使用 Swing 替代 JavaFX -->
|
|
|
<profile>
|
|
|
<id>gui-swing</id>
|
|
|
<build>
|
|
|
<resources>
|
|
|
<resource>
|
|
|
<directory>src/main/resources</directory>
|
|
|
</resource>
|
|
|
<resource>
|
|
|
<directory>${project.basedir}</directory>
|
|
|
<includes>
|
|
|
<include>library.db</include>
|
|
|
</includes>
|
|
|
<targetPath>.</targetPath>
|
|
|
</resource>
|
|
|
</resources>
|
|
|
<plugins>
|
|
|
<plugin>
|
|
|
<groupId>org.apache.maven.plugins</groupId>
|
|
|
<artifactId>maven-shade-plugin</artifactId>
|
|
|
<version>3.5.0</version>
|
|
|
<executions>
|
|
|
<execution>
|
|
|
<phase>package</phase>
|
|
|
<goals>
|
|
|
<goal>shade</goal>
|
|
|
</goals>
|
|
|
<configuration>
|
|
|
<shadedArtifactAttached>true</shadedArtifactAttached>
|
|
|
<shadedClassifierName>gui-swing</shadedClassifierName>
|
|
|
<createDependencyReducedPom>false</createDependencyReducedPom>
|
|
|
<transformers>
|
|
|
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
|
|
|
<mainClass>com.smartlibrary.gui.SimpleGUIApplication</mainClass>
|
|
|
</transformer>
|
|
|
<transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
|
|
|
</transformers>
|
|
|
<filters>
|
|
|
<filter>
|
|
|
<artifact>*:*</artifact>
|
|
|
<excludes>
|
|
|
<exclude>META-INF/*.SF</exclude>
|
|
|
<exclude>META-INF/*.DSA</exclude>
|
|
|
<exclude>META-INF/*.RSA</exclude>
|
|
|
</excludes>
|
|
|
</filter>
|
|
|
</filters>
|
|
|
</configuration>
|
|
|
</execution>
|
|
|
</executions>
|
|
|
</plugin>
|
|
|
</plugins>
|
|
|
</build>
|
|
|
</profile>
|
|
|
|
|
|
<!-- GUI Fat JAR Profile - JavaFX 版本的 Fat JAR -->
|
|
|
<profile>
|
|
|
<id>gui-fat</id>
|
|
|
<build>
|
|
|
<resources>
|
|
|
<resource>
|
|
|
<directory>src/main/resources</directory>
|
|
|
</resource>
|
|
|
<resource>
|
|
|
<directory>${project.basedir}</directory>
|
|
|
<includes>
|
|
|
<include>library.db</include>
|
|
|
</includes>
|
|
|
<targetPath>.</targetPath>
|
|
|
</resource>
|
|
|
</resources>
|
|
|
<plugins>
|
|
|
<plugin>
|
|
|
<groupId>org.apache.maven.plugins</groupId>
|
|
|
<artifactId>maven-shade-plugin</artifactId>
|
|
|
<version>3.5.0</version>
|
|
|
<executions>
|
|
|
<execution>
|
|
|
<phase>package</phase>
|
|
|
<goals>
|
|
|
<goal>shade</goal>
|
|
|
</goals>
|
|
|
<configuration>
|
|
|
<shadedArtifactAttached>true</shadedArtifactAttached>
|
|
|
<shadedClassifierName>gui-fat</shadedClassifierName>
|
|
|
<createDependencyReducedPom>false</createDependencyReducedPom>
|
|
|
<transformers>
|
|
|
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
|
|
|
<mainClass>com.smartlibrary.gui.GUIApplication</mainClass>
|
|
|
</transformer>
|
|
|
<transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
|
|
|
</transformers>
|
|
|
<filters>
|
|
|
<filter>
|
|
|
<artifact>*:*</artifact>
|
|
|
<excludes>
|
|
|
<exclude>META-INF/*.SF</exclude>
|
|
|
<exclude>META-INF/*.DSA</exclude>
|
|
|
<exclude>META-INF/*.RSA</exclude>
|
|
|
</excludes>
|
|
|
</filter>
|
|
|
</filters>
|
|
|
</configuration>
|
|
|
</execution>
|
|
|
</executions>
|
|
|
</plugin>
|
|
|
</plugins>
|
|
|
</build>
|
|
|
</profile>
|
|
|
|
|
|
<profile>
|
|
|
<id>web</id>
|
|
|
<properties>
|
|
|
<project.packaging>war</project.packaging>
|
|
|
</properties>
|
|
|
<build>
|
|
|
<resources>
|
|
|
<resource>
|
|
|
<directory>src/main/resources</directory>
|
|
|
</resource>
|
|
|
<resource>
|
|
|
<directory>${project.basedir}</directory>
|
|
|
<includes>
|
|
|
<include>library.db</include>
|
|
|
</includes>
|
|
|
<targetPath>.</targetPath>
|
|
|
</resource>
|
|
|
</resources>
|
|
|
<plugins>
|
|
|
<plugin>
|
|
|
<groupId>org.apache.maven.plugins</groupId>
|
|
|
<artifactId>maven-war-plugin</artifactId>
|
|
|
<version>3.3.2</version>
|
|
|
<configuration>
|
|
|
<failOnMissingWebXml>false</failOnMissingWebXml>
|
|
|
</configuration>
|
|
|
</plugin>
|
|
|
<plugin>
|
|
|
<groupId>org.springframework.boot</groupId>
|
|
|
<artifactId>spring-boot-maven-plugin</artifactId>
|
|
|
<version>${spring.boot.version}</version>
|
|
|
<configuration>
|
|
|
<skip>false</skip>
|
|
|
<mainClass>com.smartlibrary.web.WebApplication</mainClass>
|
|
|
</configuration>
|
|
|
<executions>
|
|
|
<execution>
|
|
|
<goals>
|
|
|
<goal>repackage</goal>
|
|
|
</goals>
|
|
|
</execution>
|
|
|
</executions>
|
|
|
</plugin>
|
|
|
</plugins>
|
|
|
</build>
|
|
|
<dependencies>
|
|
|
<dependency>
|
|
|
<groupId>org.springframework.boot</groupId>
|
|
|
<artifactId>spring-boot-starter-tomcat</artifactId>
|
|
|
<version>${spring.boot.version}</version>
|
|
|
<scope>provided</scope>
|
|
|
</dependency>
|
|
|
</dependencies>
|
|
|
</profile>
|
|
|
</profiles>
|
|
|
</project> |