我在Scala中创建了一个域,而在Java中创建了一些类。我需要在Aspectj中创建一些方面,我知道这是有用的,因为使用Java类并且它可以工作。 问题是当Scala类被注释时它不起作用。像hibernate这样的其他注释可以很好地与我的Scala类配合使用。
这是我的pom.xml:
self.navigationcontroller.present(vc2, animated: true)
self.dismiss(animated: false)
我认为我必须对maven做一些事情,因为方面和其余的代码工作正常。 反正有吗?
谢谢!
答案 0 :(得分:1)
首先,确保您的方面(基于注释或本机语法)始终具有.aj
文件扩展名(通过"新方面"而不是&#34将它们添加到您的项目中;您使用的任何IDE中的新类"菜单。我已在我的fork中删除了您的仓库中的重复类,并相应地重命名了另一个。顺便说一下,我选择了原生语法。
更糟糕的是,你在某种程度上期望在特定目录中编写无格式的Scala类,但是你没有配置Scala插件来实际将它们放在那里。我通过添加此代码段修复了该问题:
<configuration>
<outputDir>${project.build.directory}/unwoven-classes</outputDir>
</configuration>
现在,AspectJ Maven插件在那里找到Scala类并对它们执行二进制编织。这修复了Java和Scala测试。他们之前都没有在Maven中失败过,现在至少Java版本在IntelliJ中运行,但不是Scala版本。这是因为IDEA不知道这个奇怪的Maven设置与你的附加(中间)目录。
因此,方面没有任何问题,或者AspectJ无法使用Scala二进制文件。项目设置是错误的,在某种程度上它仍然与IDE支持有关。
那你怎么能完全解决呢?您有几种选择:
其他变体是可能的。我不想在这里进行过度分析,我只是通过快速简单的方法修复了你的Maven设置,以便让你前进:
$ mvn clean verify
(...)
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Aktive Codepage: 65001.
Running aspects.AnnotationAspectTest
set(String model.JavaEntity.name)
set(String model.ScalaEntity.name)
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.055 sec
Results :
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ aspectj-with-scala ---
[INFO] Building jar: C:\Users\Alexander\Documents\java-src\aspectj-with-scala\target\aspectj-with-scala-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
(...)
P.S。:我还为您创建了一个pull request,可以轻松地将我的更改整合到您的回购中。
P.P.S。:看,MCVE比你之前做的更有帮助:发布一个单独的问题,只显示一个方面,然后在这里只用Maven POM发布这个问题。我需要两个加上其他类来重现和解决问题。在您发布GitHub项目之后,找到并修复它非常简单。
答案 1 :(得分:0)
问题很可能是方面通常应用于java代码的语义 - &#34;找到一个名为X的方法,并围绕它执行以下操作。&#34;但是,从Java查看时,Scala代码通常不遵循预期的命名约定。如果没有关于特定切入点的详细信息 - 以及它们应用的代码 - 我无法提供更多信息。