Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/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 maven项目中编译文件的条件排除_Java_File_Maven_Compilation - Fatal编程技术网

Java maven项目中编译文件的条件排除

Java maven项目中编译文件的条件排除,java,file,maven,compilation,Java,File,Maven,Compilation,在maven项目中,有条件地从编译中排除java文件的最简单/正确的方法是什么 我希望能够在pom.xml中设置“布尔”属性: <properties> <IncludeMayBe>true</IncludeMayBe> </properties> ... <plugin> <groupId>org.apache.maven.plugins</groupId> <artifact

在maven项目中,有条件地从编译中排除java文件的最简单/正确的方法是什么

我希望能够在pom.xml中设置“布尔”属性:

<properties>
    <IncludeMayBe>true</IncludeMayBe>
</properties>

...

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>2.3.2</version>
    <configuration>
        <excludes>
            ????

        </excludes>
    </configuration>
</plugin>

真的
...
org.apache.maven.plugins
maven编译器插件
2.3.2
????
有没有办法修改编译器插件?还是我应该去看个人资料?我觉得创建个人资料有些过分,但这可能是唯一的解决方案

编辑:

我们已经确定,配置文件是解决方案。对于pom.xml中的条件激活,可以使用以下选项:

<profiles>
  <profile>
    <activation>
      <property>
        <IncludeMayBe>true</IncludeMayBe>
      </property>
    </activation>
    ...
  </profile>
</profiles>

真的
...

您不能使用编译器插件(见下文)执行此操作

但即使你可以,也感觉不对。这意味着工件JAR文件中的文件将取决于命令行开关和/或环境设置,这使得其他人很难复制构建

我的直觉是,最好将maven项目模块化,并使用概要文件来确定构建哪些模块


我看了一下编译器插件mojo的源代码,似乎没有办法配置源代码包含/排除过滤器。某些时候,有人实现了过滤器,但是相关的
Map
对象是私有的,无法填充它们,因此无法使用此功能

代码如下:

我想你可以破解你自己版本的插件。。。但这似乎是个坏主意。

我建议您使用。 使用它,您可以拥有多个源目录。 然后,您可以使用配置文件控制包含哪些源目录

假设您的监控类位于src/monitoring/java下,您可以将以下内容添加到pom.xml中的元素中

<profiles>
    <profile>
        <id>monitoring</id>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>build-helper-maven-plugin</artifactId>
                    <version>1.5</version>
                    <executions>
                        <execution>
                            <id>add-sources</id>
                            <phase>generate-sources</phase>
                            <goals>
                                <goal>add-source</goal>
                            </goals>
                            <configuration>
                                <sources>
                                    <source>${basedir}/src/monitoring/java</source>
                                </sources>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>

监测
org.codehaus.mojo
构建助手maven插件
1.5
添加源
生成源
添加源
${basedir}/src/monitoring/java

在我们的案例中,这不是一个问题(即复制构建)。我们对此很满意。您试图用这种排除法解决的根本问题是什么?我觉得可能有一个比选择性地排除源文件更直观的解决方案。例如,在一个大型项目中,您可能希望开发辅助代码来检查应用程序的行为,并能够在测试环境中运行时收集数据。但在生产中,您不想要或不需要该代码。删除它会创建更小、更优化的JAR。您正在查找配置文件。我已经看过这个插件,但它似乎没有启用代码的“有条件”包含/排除。我遗漏了什么吗?你需要用maven配置文件来控制它。对于带有额外监控的jar用于测试的用例,我会有一个名为“监控”的配置文件,其中包含添加额外源文件夹的build helper插件,然后使用“mvn clean install-Pmonitoring”或只使用“mvn clean install”来构建它,而不使用额外的类。好的,那么,它将是配置文件。至少,这个问题已经澄清了。好吧,这个答案是8年前写的,但现在我想知道它是否可以用来添加额外的Kotlin源代码,而不仅仅是Java源代码。