如何在带有注释的maven中排除编译java类
我已经有了一个工作解决方案,我可以使用maven指定在使用特定maven概要文件时不编译哪些类 但我想使用一个通用的解决方案,并使用注释代替 我目前的解决方案是如何在带有注释的maven中排除编译java类,java,maven,annotations,Java,Maven,Annotations,我已经有了一个工作解决方案,我可以使用maven指定在使用特定maven概要文件时不编译哪些类 但我想使用一个通用的解决方案,并使用注释代替 我目前的解决方案是 <plugin> <!-- Exclude some web services used only for internal testing --> <groupId>org.apache.maven.plugins</groupId> <artifactId
<plugin>
<!-- Exclude some web services used only for internal testing -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<optimize>true</optimize>
<excludes>
<exclude>**/something/*ClassPattern.java</exclude>
</excludes>
<testExcludes>
<exclude>**/something/*ClassPatternTest.java</exclude>
</testExcludes>
</configuration>
</plugin>
在班上最好
在我看来,如果不改变maven的行为,这可能很难(或不可能做到)。这不是这里的范围。这种注释你可以试试这个
<build> <plugins>
<!-- Run annotation processors on src/main/java sources -->
<plugin>
<groupId>org.bsc.maven</groupId>
<artifactId>maven-processor-plugin</artifactId>
<executions>
<execution>
<id>process</id>
<goals>
<goal>process</goal>
</goals>
<phase>generate-sources</phase>
</execution>
</executions>
</plugin>
<!-- Disable annotation processors during normal compilation -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<compilerArgument>-proc:none</compilerArgument>
</configuration>
</plugin>
</plugins> </build>
org.bsc.maven
maven处理器插件
过程
过程
生成源
org.apache.maven.plugins
maven编译器插件
-过程:无
您不能(我假设)使用注释来确定向java编译器呈现的源代码,因为您首先需要编译源代码来处理注释
似乎您需要在maven项目中创建不同的模块:一个模块生成带有生产代码的jar文件,另一个模块生成带有依赖于生产工件的测试实现的jar文件
如果代码确实需要在同一个maven模块中,那么应该始终编译代码。但是,您可以使用
maven jar plugin
在package
阶段创建多个工件:默认的artifactId
.jar和artifactId
-test-lib.jar工件。您可以通过为插件指定多个执行,并使用
和
根据需要拆分jar文件来实现这一点 为什么这样更好?我更喜欢maven方法。在类本身中存储构建信息似乎不是一个好的做法。如果您决定要构建该类,该怎么办?现在需要更改代码,将它们放在src/test/java中。默认的maven config将知道它们是测试类。@cowls:它更为好,因为它更通用。所有我想添加到我的系统但不想暴露的新东西都会得到这个注释。不要乱动pom文件。我想这是风格的问题。我认为sbk可能就在这里,如果你不想在生产中使用它们,它们就不应该在src/main/java中。假设它们只是测试类,将它们放在src/test/java中,Maven将处理它。这些都是供内部使用的测试服务(内部消费者在交付时获得整个应用,再加上这些额外的服务)。所以把它们放在测试包中并没有好处。我现在有了一个名称约定的解决方案,跳过这些类的战争包装目前对我来说很有效。这违背了目的,我将尝试进一步澄清这个问题。
<build> <plugins>
<!-- Run annotation processors on src/main/java sources -->
<plugin>
<groupId>org.bsc.maven</groupId>
<artifactId>maven-processor-plugin</artifactId>
<executions>
<execution>
<id>process</id>
<goals>
<goal>process</goal>
</goals>
<phase>generate-sources</phase>
</execution>
</executions>
</plugin>
<!-- Disable annotation processors during normal compilation -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<compilerArgument>-proc:none</compilerArgument>
</configuration>
</plugin>
</plugins> </build>