【发布时间】:2013-12-02 15:30:57
【问题描述】:
相关问题
我的情况
我正在使用 maven 3.1.0 编译一个项目。然后将其部署在 Tomcat 7 上,在我的堆栈跟踪中,我得到 (Unknown Source) 而不是 (myclass.java:14)。它发生在我的课程中,但与其他库一起正常工作。
从相关主题中,我了解到这是由于类文件中缺少行号。这可能是由于使用了 jre 或配置错误所致。这是我尝试过的一些步骤:
- 我最近从 jdk 1.6 迁移到 jdk1.7.0_21(这似乎是问题的原因)。我尝试了三个 java 安装(jdk1.7.0_21、32 和 64 位以及 jdk1.7.0_45)。 JAVA_HOME 指向正确的文件夹。
-
我看到我们可以在 javac 中添加 debug 和 debuglevel 选项。我尝试使用以下配置将它们添加到 Maven 中。我也强制使用 javac 而不是 javax。
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>${jdk.version}</source> <target>${jdk.version}</target> <debuglevel>lines,vars,source</debuglevel> <debug>true</debug> <forceJavacCompilerUse>true</forceJavacCompilerUse> </configuration> </plugin> - 擦除目标文件和 tomcat 战争。
没有任何效果...
编辑
在类上使用javap -l 会显示 LineNumberTable:
public void init();
LineNumberTable:
line 31: 0
line 32: 10
line 33: 21
...
问题很可能来自于 tomcat7 方面。
【问题讨论】:
-
您可以尝试使用
javap检查编译的.class文件。虽然不太可能,但有可能这些行存在,但 Tomcat 在加载它们时会做一些狡猾的事情。您还可以使用单个测试 java 文件和 POM 中的编译器选项创建一个全新的项目,以帮助您简化任务。 -
运行
mvn -X compile看看 maven 实际在做什么。运行mvn help:effective-pom以查看最终的 maven 配置。 -
@biziclop 好吧,奇怪的
javap -l显示了 LineNumberTable。我会在tomcat方面看看 -
那一定是Tomcat中的一些VM优化标志或类似的。
-
还没有。我在 tomcat 或 VM 方面没有发现任何有趣的东西。我应该去做一个简单的测试用例,但我还没有时间。但是我觉得问题出在tomcat上很奇怪。
标签: java maven tomcat tomcat7 stack-trace