我正在尝试在一个项目中使用 Spring Security,其中我使用 eclipselink 作为 modelgen 处理器来生成静态元模型。
当我尝试这样做时,我遇到奇怪的编译错误,例如:
> java.lang.RuntimeException: com.sun.tools.javac.code.Symbol$CompletionFailure: class file for org.springframework.security.ldap.DefaultSpringSecurityContextSource not found
即使我不使用 LDAP。如果我添加 jars,我会收到其他错误,例如缺少 sl4j、缺少 openid 等。
如果我将使用的 modelgen 处理器与 hibernate 实现交换,则一切编译都不会出现问题。
我找到了一个最小的项目来重现该问题:
MyEnity.java
@Entity
public class MyEntity {
private String name;
private Long id;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
}
安全配置.java
public class SecurityConfig extends WebSecurityConfigurerAdapter {
}
构建.gradle
apply plugin: 'war'
apply plugin: 'maven'
group = 'com.demo'
version = 'alpha'
sourceCompatibility = 1.8
targetCompatibility = 1.8
[compileJava, compileTestJava]*.options*.encoding = 'UTF-8'
repositories {
maven { url "http://repo.maven.apache.org/maven2" }
maven { url "http://download.eclipse.org/rt/eclipselink/maven.repo/" }
}
dependencies {
compile 'org.eclipse.persistence:org.eclipse.persistence.jpa.modelgen.processor:2.6.0'//latest stable @06.07.2015
compile "org.springframework:spring-beans:4.1.6.RELEASE"
compile "org.springframework:spring-core:4.1.6.RELEASE"
compile "org.springframework:spring-web:4.1.6.RELEASE"
compile "org.springframework:spring-context:4.1.6.RELEASE"
compile 'org.springframework:spring-jdbc:4.1.6.RELEASE'
compile 'org.springframework.security:spring-security-core:4.0.2.RELEASE'
compile 'org.springframework.security:spring-security-web:4.0.2.RELEASE'
compile 'org.springframework.security:spring-security-config:4.0.2.RELEASE'
providedCompile 'javax:javaee-api:7.0@jar'
}
一旦我删除
a) 来自 MyEntity 的 @Entity
or
b) 从 Security Config 扩展 WebSecurityConfigurerAdapter
or
c) use compile 'org.hibernate:hibernate-jpamodelgen:4.3.10.Final'
代替compile 'org.eclipse.persistence:org.eclipse.persistence.jpa.modelgen.processor:2.6.0'
一切编译都没有问题。
那么为什么使用eclipselink modelgen处理器会导致编译错误呢?