Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法使我的方面运行_Java_Maven_Intellij Idea_Aspectj_Aspectj Maven Plugin - Fatal编程技术网

Java 无法使我的方面运行

Java 无法使我的方面运行,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

基本上,我有一个普通的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="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());
    }
}