undertown 路径打包问题请教

访问不到页面,main方法,IDEA启动,可以访问。。打包是按照官网配置 处理得。。

image.png

maven 

<!-- 打包配置 -->

    <build>

        <finalName>electronic_invoice</finalName>

        <plugins>

            <plugin>

                <groupId>org.apache.maven.plugins</groupId>

                <artifactId>maven-compiler-plugin</artifactId>

                <version>3.6.1</version>

                <configuration>

                    <source>1.8</source>

                    <target>1.8</target>

                    <encoding>UTF-8</encoding>

                    <!-- java8 保留参数名编译参数 -->

                    <compilerArgument>-parameters</compilerArgument>

                    <compilerArguments>

                        <verbose/>

                    </compilerArguments>

                </configuration>

            </plugin>

            <!--

                jar 包中的配置文件优先级高于 config 目录下的 "同名文件"

                因此,打包时需要排除掉 jar 包中来自 src/main/resources 目录的

                配置文件,否则部署时 config 目录中的同名配置文件不会生效

             -->

            <plugin>

                <groupId>org.apache.maven.plugins</groupId>

                <artifactId>maven-jar-plugin</artifactId>

                <version>2.6</version>

                <configuration>

                    <excludes>

                        <exclude>*.txt</exclude>

                        <exclude>*.xml</exclude>

                        <exclude>*.properties</exclude>

                    </excludes>

                </configuration>

            </plugin>

            <!-- 如果web.xml文件不存在,则按下面的方式配置 start -->

            <plugin>

                <groupId>org.apache.maven.plugins</groupId>

                <artifactId>maven-war-plugin</artifactId>

                <version>3.2.3</version>

                <configuration>

                    <failOnMissingWebXml>false</failOnMissingWebXml>

                </configuration>

            </plugin>

            <!-- 如果web.xml文件不存在,则按下面的方式配置 end -->

            <!--

                使用 mvn clean package 打包

                更多配置可参考官司方文档:http://maven.apache.org/plugins/maven-assembly-plugin/single-mojo.html

             -->

            <plugin>

                <groupId>org.apache.maven.plugins</groupId>

                <artifactId>maven-assembly-plugin</artifactId>

                <version>3.1.0</version>

                <executions>

                    <execution>

                        <id>make-assembly</id>

                        <phase>package</phase>

                        <goals>

                            <goal>single</goal>

                        </goals>

                        <configuration>

                            <!-- 打包生成的文件名 -->

                            <finalName>${project.artifactId}</finalName>

                            <!-- jar 等压缩文件在被打包进入 zip、tar.gz 时是否压缩,设置为 false 可加快打包速度 -->

                            <recompressZippedFiles>false</recompressZippedFiles>

                            <!-- 打包生成的文件是否要追加 release.xml 中定义的 id 值 -->

                            <appendAssemblyId>true</appendAssemblyId>

                            <!-- 指向打包描述文件 package.xml -->

                            <descriptors>

                                <descriptor>package.xml</descriptor>

                            </descriptors>

                            <!-- 打包结果输出的基础目录 -->

                            <outputDirectory>${project.build.directory}/</outputDirectory>

                        </configuration>

                    </execution>

                </executions>

            </plugin>

        </plugins>

        <resources>

            <resource>

                <directory>src/main/resources</directory>

                <filtering>true</filtering>

                <includes>

                    <include>**/*.properties</include>

                    <include>**/*.conf</include>

                </includes>

            </resource>

            <resource>

                <directory>src/main/resources</directory>

                <filtering>false</filtering>

                <includes>

                    <include>**/*.xml</include>

                    <!-- 跳过字体处理 -->

                    <include>**/*.ttf</include>

                    <include>**/*.TTF</include>

                    <!-- 跳过图片处理 -->

                    <include>**/*.pfx</include>

                    <include>**/*.png</include>

                </includes>

            </resource>

        </resources>

    </build>


package代码


<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.0.0"

          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

          xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.0.0 http://maven.apache.org/xsd/assembly-2.0.0.xsd">

    <!--

      assembly 打包配置更多配置可参考官司方文档:

      http://maven.apache.org/plugins/maven-assembly-plugin/assembly.html

    -->

    <id>release</id>

    <!--

        设置打包格式,可同时设置多种格式,常用格式有:dir、zip、tar、tar.gz

        dir 格式便于在本地测试打包结果

        zip 格式便于 windows 系统下解压运行

        tar、tar.gz 格式便于 linux 系统下解压运行

    -->

    <formats>

        <format>dir</format>

        <format>zip</format>

        <!-- <format>tar.gz</format> -->

    </formats>


    <!-- 打 zip 设置为 true 时,会在 zip 包中生成一个根目录,打 dir 时设置为 false 少层目录 -->

    <includeBaseDirectory>true</includeBaseDirectory>


    <fileSets>

        <!-- 配置打入 -->

        <fileSet>

            <directory>${project.build.directory}/classes</directory>

            <outputDirectory>config</outputDirectory>

        </fileSet>

        <!-- src/main/webapp 全部 copy 到 webapp 目录下 -->

        <fileSet>

            <directory>${basedir}/src/main/webapp</directory>

            <outputDirectory>webapp</outputDirectory>

        </fileSet>

        <fileSet>

            <directory>${basedir}/src/main/bin</directory>

            <outputDirectory></outputDirectory>

            <!-- 脚本文件在 linux 下的权限设为 755,无需 chmod 可直接运行 -->

            <fileMode>755</fileMode>

            <includes>

                <include>*.sh</include>

                <include>*.bat</include>

            </includes>

        </fileSet>

    </fileSets>

    <!-- 处理 配置文件信息,注意打包时 项目跟目录下 配置文件信息 一个用于 main 一个用于 发布打包-->

    <files>

        <file>

            <source>${project.build.directory}/classes/log4j.properties</source>

            <outputDirectory></outputDirectory>

        </file>

    </files>

    <!-- 依赖的 jar 包 copy 到 lib 目录下 -->

    <dependencySets>

        <dependencySet>

            <outputDirectory>lib</outputDirectory>

        </dependencySet>

    </dependencySets>

</assembly>


Controller 跳页


@NotNeedLogin

@Action(value = "/szhtfpptgl/fpcx", viewPath = "downInvoice")

public class DownInvoiceController extends BaseController {

    public void cx() {

        render("index.jsp");

    }


评论区

小太阳cm

2019-11-08 17:58

@JFinal @杜福忠 麻烦大佬给看看,并说明下原理

JFinal

2019-11-08 18:18

看上去像是 dependency 中出现了多个版本的 servlet 依赖,注意去除干净

此外, undertow 不支持 JSP,建议使用 jfinal 的 enjoy,谁用谁爽翻:
https://www.jfinal.com/doc/6-1

如果一定要使用 JSP,可以使用 jetty-server:
https://www.jfinal.com/doc/1-6

或者使用传统 java web 的开发方式:
https://www.jfinal.com/doc/1-11

杜福忠

2019-11-08 19:20

java.lang.NoSuchMethodError
这个异常, 简单的理解为 系统里有两个 同包同类名的 这样一个Java类,然后这两个类都存在于 那些依赖 jar 中 ,这个时候启动时加载就开始报错了,这种情况,就是 常见的 jar 冲突,然后根据 报错后面提示的类名信息,就能找到是哪些jar 冲突了, 记住这个异常,就像记null异常一样。。。

小太阳cm

2019-11-08 19:33

@JFinal 好的,感谢分享,查过了,执行maven命令 “validate”会打出日志,没出,得用Jsp,项目催的急,我是后台,来不及改了。老项目Jsp得,等前端有资源,我们再调整,祝好

小太阳cm

2019-11-08 19:36

@杜福忠 好,我再排查下,IDEA main undertown 启动没错...我就挺郁闷得,我定位,是我打包得问题,一直在排查路径,因为,前端静态js css 也访问不到

JFinal

2019-11-08 20:15

@小太阳cm 老项目用 jetty-server 就挺好,这个项目用了八年,品质有保障

当然,jfinal-undertow 更好用