我使用的是IntelliJ IDEA 15.0.4,Apache Tomcat 7.0.68和JDK 1.8.0-74。
我的Java项目在IntelliJ中成功编译。但是,每当我部署爆炸的WAR时,我都会从Tomcat中收到此错误:
Θ(n log n)
我的班级看起来像这样:
SEVERE: Error configuring application listener of class com.myCompany.init.Log4jListener
java.lang.Error: Unresolved compilation problems:
The import org.apache.log4j cannot be resolved
...(stack trace removed for brevity)
import java.util.PropertyResourceBundle;
import java.util.ResourceBundle;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import org.apache.log4j.helpers.Loader;
import com.myCompany.AbstractEnvironment;
public class Log4jListener implements ServletContextListener {
private static final String KEY_EMAIL = "Alert";
private static final String SYSTEM_KEY_EMAIL = "Alert";
private static final String PROPERTY_FILE = "properties.environment";
@Override
public void contextDestroyed(ServletContextEvent sce) {
// nothing to do
}
@Override
public void contextInitialized(ServletContextEvent sce) {
final PropertyResourceBundle bundle = (PropertyResourceBundle) ResourceBundle.getBundle(PROPERTY_FILE);
final String emailInfo = AbstractEnvironment.getProperty(bundle, KEY_EMAIL);
System.setProperty(SYSTEM_KEY_EMAIL, emailInfo);
PropertyConfigurator.configure(Loader.getResource("properties/log4j.properties"));
final Logger logger = LogManager.getLogger(Log4jListener.class);
logger.debug("Logger Initialized");
}
}
包来自Gradle依赖项,它包含在我的项目中:
...而且,在我的项目的其他类中,我已经从同一个类中实例化了一个org.apache.log4j
对象,它并没有抱怨它。
更有趣的是,当一个同事在他的计算机上检查我的(同样的)项目时,他没有得到这个错误,使用相同版本的IDEA,JDK和Tomcat。
IDEA没有告诉我我有任何Java错误。我做了Gradle Log4j
和clean
任务。我在IntelliJ中做了build
。我在IntelliJ中重建了工件。我在Tomcat服务器上删除并重新添加了工件,但仍然遇到了同样的错误。
这让我相信这个错误不正确并且可能是误报,因为同样的项目在我的同事的计算机上工作。有什么想法吗?