如何在带有注释的maven中排除编译java类

如何在带有注释的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

我已经有了一个工作解决方案,我可以使用maven指定在使用特定maven概要文件时不编译哪些类

但我想使用一个通用的解决方案,并使用注释代替

我目前的解决方案是

<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>