Java 无法使我的方面运行
基本上,我有一个普通的Java应用程序,带有一个main。我使用Intelij Ultimate。我有下面的pomJava 无法使我的方面运行,java,maven,intellij-idea,aspectj,aspectj-maven-plugin,Java,Maven,Intellij Idea,Aspectj,Aspectj Maven Plugin,基本上,我有一个普通的Java应用程序,带有一个main。我使用Intelij Ultimate。我有下面的pom <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="h
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>88</groupId>
<artifactId>SpaceX</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!-- https://mvnrepository.com/artifact/postgresql/postgresql -->
<dependency>
<groupId>postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.1-901.jdbc4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- https://mvnrepository.com/artifact/aspectj/aspectjrt -->
<dependency>
<groupId>aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.5.4</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
如你所见。我想使用java.util.logging.Logger,我有一个logging.properties文件,在其中设置输出文件。我试着像上面粘贴的链接那样编译应用程序,正常运行应用程序,似乎没有任何效果。我的方面根本不起作用/它没有被使用。有什么建议吗?我错过什么了吗
我还不想在注释中使用SpringAspect。我想不出如何先让它工作
我将编译器改为ajc并测试了连接,一切正常。我已将Aspectjrt添加到依赖项。。。当我尝试运行程序时,它仍然没有任何作用。它只是正常运行,没有应用方面。
有什么想法吗?这是一个编译时编织的解决方案。因为所有主要的IDE都可以从Maven导入和更新项目,所以它可以在Eclipse、IntellijIDEA中工作,可能还有从未尝试过的NetBeans Maven POM: 4.0.0 88 太空探索技术公司 1.0-快照 UTF-8 1.8 1.8.10 org.apache.maven.plugins maven编译器插件 3.5.1 ${java.source-target.version} ${java.source-target.version} 错误的 org.codehaus.mojo aspectj maven插件 1.10 正确-> ${java.source-target.version} ${java.source-target.version} 忽视 ${java.source-target.version} ${project.build.sourceEncoding} 正确-> constructorName、packageDefaultMethod、弃用、maskedCatchBlocks、unusedLocals、unusedArguments、unusedImport-> 过程源 编写 测试编译 org.aspectj aspectjtools ${aspectj.version} org.aspectj aspectjweaver ${aspectj.version} org.codehaus.mojo aspectj maven插件 org.aspectj aspectjrt ${aspectj.version} postgresql postgresql 9.1-901.jdbc4 log4j log4j 1.2.17 org.aspectj aspectjrt postgresql postgresql log4j log4j Log4J配置文件: 根记录器选项 log4j.rootLogger=INFO,标准输出 将日志消息直接发送到标准输出 log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.patternalyout log4j.appender.stdout.layout.ConversionPattern=%d{yyyyy-MM-dd HH:MM:ss}%-5p%c{1}:%L-%m%n 驱动程序应用程序: 包com.company.app; 公共类应用程序{ 公共静态无效字符串[]args{ 新应用。doSomethingfoo,11; } 公共字符串doSomethingString字符串,int i{ 返回废话; } } 改进方面: 加载logging.properties的方式只在JAR中起作用,但在IDE中运行代码时不起作用。我建议您依赖于从Maven项目正确导入的类路径,将配置文件放在src/main/resources下,然后通过ClassLoader.getResourceAsStream打开它 包com.company.aspect; 导入org.apache.log4j.Logger; 导入org.apache.log4j.propertyConfiguration; 公共方面{ 私有静态最终记录器记录器=Logger.getLoggercom.company; 公共伐木方面{ PropertyConfigurator.configure 线 .当前线程 .getContextClassLoader .getResourceAsStreamlogging.properties ; } 切入点跟踪: callpublic*com.company..*.*&& !在观察方面; 之前:跟踪{ logger.infoenting:+thisJoinPointStaticPart.getSignature; } 之后:跟踪{ logger.info:+thisJoinPointStaticPart.getSignature; } } 控制台日志: 2017-04-02 17:58:06信息公司:23-输入:字符串com.company.app.Application.doSomethingString,int 2017-04-02 17:58:06信息公司:27-退出:字符串com.company.app.Application.doSomethingString,int
您想使用编译时编织还是加载时编织?我的答案取决于你的。还有一个简单的问题需要验证:我想AspectJ对你来说是一个新的主题?是的,这是一个新的主题,我找不到任何好的材料来阅读。我想运行我的程序,并在运行应用程序时获取文件中的日志。我想我想在装货时编织,对吗?外面有很多好的材料。如果您计划使用Maven来构建,为什么不从and开始呢
您的产品通过编译时编织而成。因为你似乎不确定,我推荐CTW,而不是LTW。如果您同意,我可以提供一个示例Maven POM来运行您的示例代码。如果它可以使我的代码运行,那就太好了。我还尝试了Hello world问候示例,但仍然没有结果,因为大多数示例都使用Eclipse.still nothing。我不明白。我使用java.util.logging。它没有使用aspectsI做了你提到的一切。我只是应该正常运行程序吗?因为我正在运行,但它仍然不工作这是某种玩笑吗?你真的很烦我:你给我看了一个使用Log4J的POM和方面代码,现在你说你在使用Java日志?那你为什么让我来修复你的Log4J设置?只要复制并粘贴我的全部代码,并将所有内容放入正确的Maven目录,然后从这些源代码导入一个新项目,就可以了。如果您不喜欢Log4J,您仍然可以使用System.out.println或您喜欢的任何东西。我要离开这里,我不喜欢和那些拿不定主意想要什么的人浪费时间。我的示例代码使用Eclipse和IDEA。再见。
public aspect LoggingAspect {
pointcut tracing():call(public * com.company..*.*(..)) && !within(LoggingAspect);
private Logger logger= Logger.getLogger("com.company");
public LoggingAspect() {
PropertyConfigurator.configure("logging.properties");
}
before(): tracing(){
logger.info("Entering: "+ thisJoinPointStaticPart.getSignature());
}
after():tracing(){
logger.info("Exiting: "+ thisJoinPointStaticPart.getSignature());
}
}