Java “什么会导致?”;无法安装断点";使用mvn tomcat7运行Web应用程序的问题:运行war?

Java “什么会导致?”;无法安装断点";使用mvn tomcat7运行Web应用程序的问题:运行war?,java,eclipse,maven,tomcat,Java,Eclipse,Maven,Tomcat,我开始失去理智了,我要振作起来,在这里写一个恰当的问题 我不知道为什么或我做了什么,因为我没有改变任何应该影响这一点的事情,但突然我得到了这个: 由于缺少行号属性,无法在com.company.whatever.MyObjectService$$EnhancerBySpringCGLIB$$e3b7e123中安装断点 或者作为屏幕截图: 是的,我已经在序言中检查过了,并且遵循了来自的建议 我不知道为什么,但最近我一直被这样的错误困扰着——使我无法完成我需要完成的实际工作 这是我的maven命令

我开始失去理智了,我要振作起来,在这里写一个恰当的问题

我不知道为什么或我做了什么,因为我没有改变任何应该影响这一点的事情,但突然我得到了这个:

由于缺少行号属性,无法在com.company.whatever.MyObjectService$$EnhancerBySpringCGLIB$$e3b7e123中安装断点

或者作为屏幕截图:

是的,我已经在序言中检查过了,并且遵循了来自的建议

我不知道为什么,但最近我一直被这样的错误困扰着——使我无法完成我需要完成的实际工作

这是我的maven命令:

mvn tomcat7:run-war -am -pl mz-web-server -Dpackage-mode=dev -Denv=dev  -DskipTests
究竟是什么原因呢

是的,我有

  • mvn清洁安装
  • 打开/关闭Eclipse
  • 刷新项目资源管理器
  • 查看序言-->Java-->编译器-->类文件生成
  • 。。。另外:取消设置、应用、再次设置、应用行号信息选项
  • 使用JDK代替JRE
  • 和上帝谈过,甚至想改变我的职业

但是没有任何帮助

您声明您使用maven,因此您在IDE中的选项在这里不太可能有什么帮助。 相反,您应该更关注maven,或者更具体地说,关注构建插件

确保已启用模式,并且具有正确的

例如:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <debug>true</debug>
                <debuglevel>lines,vars,source</debuglevel>
            </configuration>
        </plugin>
    </plugins>
</build>

org.apache.maven.plugins
maven编译器插件
1.8
1.8
真的
行、变量、源

我在Jboss上经常遇到这个问题

当我被它绊倒时,我只需清理部署目录并重新部署war/jar,一切正常


您还可以尝试“丑陋”的替代方案,并尝试远程调试您的应用程序

我想您已经尝试过所有这些情况,但今天我在调试一个“旧”的、有点凌乱的Spring应用程序时遇到了问题,该应用程序部署在一个使用JDK 1.6的Tomcat 6中

经过多次检查:

  • 正确添加到.class文件的行号(通过javap检查 -v)
  • 已从Eclipse/IntelliJ正确连接到Tomcat
  • 将调试和调试级别正确添加到构建任务(Ant)
  • 清理IDE和Tomcat中的所有缓存,重建,重新部署
但仍然会出现“缺少行号”的错误。我遇到问题的项目是几年前由第三方使用Ant开发的

那怎么了

每个IDE都允许您配置编译文件存储的位置。例如,对于Eclipse,默认文件夹为
/bin
(如果是Maven项目,则为
/target
),对于IntelliJ,默认文件夹为
/out
。 我的项目使用Ant,在
${webroot.dir}/WEB-INF/classes
这样的文件夹中编译文件(如build.xml文件中的编译任务所示),然后将这些.class文件添加到生成的war中

<property name="classes.dir" value="${webroot.dir}/WEB-INF/classes" />
<target name="compile" depends="prepare,resources">
    <javac srcdir="${basedir}/src/main/java" destdir="${classes.dir}" debug="on" debuglevel="lines,vars,source">
        ...
    </javac>
</target>

...
问题是IDE在/bin文件夹中查找.class文件,但我新编译的.class文件放在了另一个地方。更改项目配置中的输出文件夹(Eclipse和IntelliJ)并指向同一个Ant的编译文件夹后,断点开始按预期工作

我知道您使用的是Maven,而我的案例使用的是Ant,但是如果您指定了输出文件夹,并且与您正在使用的IDE中的项目配置不匹配,那么任何构建自动化工具都可能出现文件夹混乱的情况


希望你的理智还不错;)

我在工作场所只处理一个项目时遇到了这条消息,因此我得出结论,因为这个项目在同一工作场所的不同项目中具有相同的组ID和文件结构/包(我试图从jdbc更改为hibernate,所以我只是复制了其中的大部分)。 因此,我猜想编译器在识别断点的位置时遇到了问题,因为文件具有相同的名称和路径,所以当SPRING开始运行时,编译器尝试将其放在原始文件中,而不是新文件中


更改包导致消息消失。

com.company.whatever.MyObjectService$$EnhancerBySpringCGLIB$$e3b7e123
看起来像是CGLIB生成的类,即动态生成的字节码。maven和IDE选项都不可能对您有所帮助,因为该类可能没有任何Java源代码。