2014-01-11 9 views
5

Ich mag die advanced mapping mode des Frühlings-data-Neo4j in meinem Scala SBT-Projekt (hosted on github) verwenden:mit Spring-Data-Neo4j Mapping-Modus in SBT

Ich kann mit dem in der Datenbank Knoten speichern Repository, aber ich kann das Aspectj-Weben nicht funktionieren lassen.

Dies ist, was ich bisher:

build.sbt:

resolvers ++= Seq(
    "spring" at "http://repo.spring.io/milestone", 
    "neo4j-releases" at "http://m2.neo4j.org/releases/" 
) 

libraryDependencies ++= Seq(
    "org.springframework.data" % "spring-data-neo4j"   % "3.0.0.M1"  % "compile", 
    "org.springframework.data" % "spring-data-neo4j-aspects" % "3.0.0.M1"  % "compile", 
    "javax.persistence"  % "persistence-api"   % "1.0"   % "compile", 
    "javax.validation"   % "validation-api"   % "1.0.0.GA"  % "compile", 
    "junit"     % "junit"      % "4.11"   % "test", 
    "com.novocode"    % "junit-interface"   % "0.9"   % "test", 
    "org.springframework"  % "spring-test"    % "4.0.0.RELEASE" % "test" 
) 


Seq(aspectjSettings: _*) 

verbose in Aspectj := false 

showWeaveInfo in Aspectj := false 

inputs in Aspectj <+= compiledClasses 

binaries in Aspectj <++= update map { report:UpdateReport => 
    report.matching(
    moduleFilter(organization = "org.springframework.data", name = "spring-data-neo4j-aspects") 
) 
} 

products in Compile <<= products in Aspectj 

products in Runtime <<= products in Compile 

Projekt/plugins.sbt:

addSbtPlugin("com.typesafe.sbt" % "sbt-aspectj" % "0.9.4") 

Node-Klasse und Repository:

@NodeEntity 
class Node { 
    @GraphId 
    private var graphId: java.lang.Long = _ 
} 

trait NodeRepository extends GraphRepository[Node] 

Test:

@ContextConfiguration(locations = Array("classpath*:/META-INF/spring/module-context.xml")) 
@RunWith(classOf[SpringJUnit4ClassRunner]) 
class SDNTest extends AbstractJUnit4SpringContextTests { 
    @Autowired private var nodeRepository: NodeRepository = null 

    @Test 
    def persist { 
    val node = new Node() 
    //nodeRepository.save(node) 
    node.persist() 
    } 

} 

Wenn ich versuche, den Test auszuführen, erhalte ich diese Fehler:

$ sbt test 

[info] Weaving 1 input with 1 AspectJ binary to target/scala-2.10/aspectj/classes... 
[error] error at sdntest/Node.scala::0 The type sdntest.Node must implement the inherited abstract method org.springframework.data.neo4j.aspects.core.GraphBacked.setPersistentState(Ljava/lang/Object;) 
[error]  see also: org/springframework/data/neo4j/aspects/core/GraphBacked.java::0 
[error]  see also: org/springframework/data/neo4j/aspects/support/node/Neo4jNodeBacking.aj:66::0 
[error] error at sdntest/Node.scala::0 The type sdntest.Node must implement the inherited abstract method org.springframework.data.neo4j.mapping.ManagedEntity.setPersistentState(Ljava/lang/Object;) 
[error]  see also: org/springframework/data/neo4j/mapping/ManagedEntity.java::0 
[error]  see also: org/springframework/data/neo4j/aspects/support/node/Neo4jNodeBacking.aj:66::0 
[warn] warning at /home/felix/.ivy2/cache/org.springframework.data/spring-data-neo4j-aspects/jars/spring-data-neo4j-aspects-3.0.0.M1.jar!org/springframework/data/neo4j/aspects/support/relationship/Neo4jRelationshipBacking.class:64::0 advice defined in org.springframework.data.neo4j.aspects.support.relationship.Neo4jRelationshipBacking has not been applied [Xlint:adviceDidNotMatch] 
[warn] warning at /home/felix/.ivy2/cache/org.springframework.data/spring-data-neo4j-aspects/jars/spring-data-neo4j-aspects-3.0.0.M1.jar!org/springframework/data/neo4j/aspects/support/relationship/Neo4jRelationshipBacking.class:167::0 advice defined in org.springframework.data.neo4j.aspects.support.relationship.Neo4jRelationshipBacking has not been applied [Xlint:adviceDidNotMatch] 
[warn] warning at /home/felix/.ivy2/cache/org.springframework.data/spring-data-neo4j-aspects/jars/spring-data-neo4j-aspects-3.0.0.M1.jar!org/springframework/data/neo4j/aspects/support/relationship/Neo4jRelationshipBacking.class:174::0 advice defined in org.springframework.data.neo4j.aspects.support.relationship.Neo4jRelationshipBacking has not been applied [Xlint:adviceDidNotMatch] 
org.aspectj.bridge.AbortException: AspectJ failed 
    at com.typesafe.sbt.SbtAspectj$Ajc$.runAjcMain(SbtAspectj.scala:220) 
... 

Was mache ich falsch?

+0

Ich 'git clone'd das Projekt, aber wenn' sbt test' Ich endete mit 'sbt.ResolveException: ungelöste Abhängigkeit: org.neo4j # neo4j-cypher-dsl; 2.0.0-M06: nicht gefunden'. Wo hast du es gefunden? –

+0

Richtig, der Neo4j-Resolver fehlte. Ich habe gerade den Fehler gemacht. – man

Antwort

0

Wenn Sie die sbt Version 0.13.2 Bump funktioniert es jetzt:

Projekt/build.properties ->

sbt.version=0.13.2 

Meine Vermutung ist, etwas über das aspectj Plugin funktioniert nicht bei älteren sbt baut.

+0

Ich bekomme die gleichen Fehler wie zuvor. Läuft der Test für Sie? – man

+0

ja. Sie müssen möglicherweise ~/.sbt/boot oder ~/.ivy2/löschen. Nicht sicher, was in Ihrem System vor sich geht. – jsuereth

+0

Funktioniert immer noch nicht ... Ich entfernte ~/.sbt, ~/.ivy2 und machte sbt saubere und saubere Dateien. Benutzt du denselben Code wie ich? (nur auf https://github.com/fdietze/spring-data-neo4j-aspects-sbt-example/tree/sbt132). Aus meiner Sicht hat es früher nicht funktioniert, weil ajc Scala nicht selbst kompilieren kann und spring-data-neo4j nicht funktioniert, indem nur die Klassendateien gewebt werden. Also was hätte sich ändern können? – man