如何在tomcat上运行我的Maven项目(Angular + springboot)?

时间:2019-08-06 12:10:06

标签: java angular maven spring-boot tomcat

我已经基于angular 8和spring boot创建了一个Web应用程序。我在本地实现了代码库,并且运行良好。 我的Angular代码(客户端)运行在localhost:4200上,而spring boot(服务器)运行在localhost:8080上。 直到这里一切都按预期运行。

现在,我想将整个Web应用程序作为一个捆绑包进行部署,以便可以将其作为对Tomcat的一次大战来部署。

我正在使用maven创建war文件。

但是当我将这个war文件部署在tomcat上并启动tomcat时,我无法在浏览器中看到预期的登录页面。

基本上,我对maven不太了解,并且正在跟踪Internet上以下链接中的可用资源来生成战争文件。

https://dzone.com/articles/building-a-web-app-using-spring-boot-angular-6-and

因此,我无法确定问题出在我的内部版本还是尝试访问资源的URL上。

如果仅部署UI构建,则如果我访问localhost:8080,则可以看到登录页面。

我有三个pom文件,如本教程中所述。 1.绒球 2.服务器pom 3. ui-pom

下面是我的pom文件

parent-pom.xml:

<?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.dzs.licenseGenerator</groupId>
  <artifactId>lg-parent</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>pom</packaging>
  <parent>
        <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>2.1.6.RELEASE</version>
      <relativePath />
  </parent>
  <modules>
   <module>LicenseGenerator_Backend</module>
    <module>LicenseGenerator_UI</module>
  </modules>
</project>

server-pom.xml

<?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>
    <parent>
        <groupId>com.dzs.licenseGenerator</groupId>
        <artifactId>lg-parent</artifactId>
        <version>0.0.1-SNAPSHOT</version>
         <!-- lookup parent from repository -->
    </parent>
    <artifactId>LicenseGenerator_Backend</artifactId>
    <packaging>war</packaging>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>com.dzs.licenseGenerator</groupId>
            <artifactId>LicenseGenerator_UI</artifactId>
            <version>${project.version}</version>
            <scope>runtime</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
            <artifactId>maven-resources-plugin</artifactId>
            <executions>
                  <execution>
                      <id>copy-resources</id>
                      <phase>validate</phase>
                      <goals><goal>copy-resources</goal></goals>
                      <configuration>
                        <tasks>
                                <echo>Displaying value of pom.xml element</echo>
                                <echo>[project.build.directory] ${project.build.directory}</echo>
                                <echo>[project.parent.basedir] ${project.parent.basedir}</echo>
                            </tasks>
                          <outputDirectory>${project.build.directory}/classes/resources/</outputDirectory >
                          <resources>
                              <resource>
                                  <directory>${project.parent.basedir}/LicenseGenerator_UI/dist/lg-app/</directory >
                              </resource>
                          </resources>
                      </configuration>
                  </execution>
            </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-failsafe-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <configuration>
                  <packagingExcludes>WEB-INF/lib/tomcat-*.jar</packagingExcludes>
                  <warName>lg-app</warName>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

UI-pom.xml

<?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.dzs.licenseGenerator</groupId>
        <artifactId>lg-parent</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <artifactId>LicenseGenerator_UI</artifactId>
    <name>LicenseGenerator_UI</name>
    <url>http://maven.apache.org</url>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <build>
        <plugins>
            <plugin>
                <groupId>com.github.eirslett</groupId>
                <artifactId>frontend-maven-plugin</artifactId>
                <version>1.4</version>

                <configuration>
                    <nodeVersion>v10.16.0</nodeVersion>
                    <npmVersion>6.9.0</npmVersion>
                    <workingDirectory>src/main/web/</workingDirectory>
                </configuration>

                <executions>
                    <execution>
                        <id>install node and npm</id>
                        <goals>
                            <goal>install-node-and-npm</goal>
                        </goals>
                    </execution>

                    <execution>
                        <id>npm install</id>
                        <goals>
                            <goal>npm</goal>
                        </goals>
                    </execution>

                    <execution>
                        <id>npm run build</id>
                        <goals>
                            <goal>npm</goal>
                        </goals>

                        <configuration>
                            <arguments>run build</arguments>
                        </configuration>
                    </execution>
                    <execution>
                        <id>prod</id>
                        <goals>
                            <goal>npm</goal>
                        </goals>
                        <configuration>
                            <arguments>run-script build</arguments>
                        </configuration>
                        <phase>generate-resources</phase>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

为了确保我的代码结构正确无误,我正在Eclipse中发布我的Project Explorer的屏幕截图。

enter image description here

2 个答案:

答案 0 :(得分:0)

使用 ng build –prod 命令生成生产构建工件。

在UI项目文件夹中运行此命令。

生成后的生产版本中,您应该看到名为“ dist”的新文件夹。

您必须使用Maven资源插件将其打包为单个jar。正如我看到的那样,您已经在pom中插入了该插件,只需验证目录文件夹即可将其品脱到dist文件夹。

之后,只需运行 maven clean install 即可。运行此命令后,您应该会在目标文件夹上看到具有Angular 6和Spring Boot应用程序的jar。

使用 Java –jar 命令执行以启动应用程序,您应该看到从静态文件夹提供的Angular应用程序。

答案 1 :(得分:0)

您可以使用frontend-maven-plugin开始进行前端构建。前端构建完成后,它将在dist目录中生成资源文件。

之后,您可以使用maven-resources-plugin将文件从dist复制到target目录中的所需位置。