【问题标题】:How to exclude java classes from being compiled in maven with annotation如何使用注释排除java类在maven中编译
【发布时间】:2013-02-18 15:03:04
【问题描述】:

我已经有一个工作解决方案,我可以使用 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>

但是有些像

@NotCompiledForProduction 

在课堂上会相当不错。

在我看来,如果不改变 maven 的行为,这可能很难(或不可能做到)。这不是这里的范围。还有这种注解

【问题讨论】:

  • 为什么更好?我更喜欢 Maven 方法。将构建信息存储在类本身中似乎不是一个好习惯。如果您决定确实要构建该类怎么办?您现在需要更改代码。
  • 把它们放在 src/test/java.默认的 Maven 配置会知道它们是测试类。
  • @cowls :它更好,因为它更通用。我想添加到我的系统但不希望它们暴露的所有新东西都会得到这个注释。不用插手 pom 文件。我想这是风格问题。
  • 我认为 sbk 可能就在这里,如果您不希望它们在生产中使用,它们不应该在 src/main/java 中。假设它们只是测试类,将它们放在 src/test/java 中,Maven 会处理它。
  • 这些是供内部使用的测试服务(在交付时获取整个应用程序的内部消费者,以及这些额外的服务)。所以把它们放在测试包中并不好。我现在有一个带有名称约定的解决方案,并且目前跳过这些类的战争包装对我有用。

标签: java maven annotations


【解决方案1】:

您不能(我假设)使用注解来确定将哪些源代码呈现给 java 编译器,因为您需要首先编译源代码来处理注解。

您似乎需要在您的 maven 项目中创建不同的模块:一个生成带有生产代码的 jar 文件,一个生成带有测试实现的 jar 文件的模块,该文件依赖于生产工件。

如果代码确实需要在同一个 maven 模块中,那么代码应该总是被编译。但是,您可以使用 maven-jar-pluginpackage 阶段创建多个工件:默认的 artifactId.jar 和一个 artifactId-test-lib.jar 神器。您可以通过为插件指定多个执行来做到这一点,并使用&lt;includes&gt;&lt;excludes&gt; 根据需要拆分jar 文件。

【讨论】:

    【解决方案2】:

    你可以试试这个……

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

    【讨论】:

    • 这违背了目的,我将尝试进一步澄清这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-03
    • 1970-01-01
    • 2020-12-22
    • 1970-01-01
    • 2014-10-17
    • 1970-01-01
    相关资源
    最近更新 更多