【问题标题】:Is there any way to run a custom maven clean just for a specific profile?有什么方法可以为特定配置文件运行自定义 maven clean 吗?
【发布时间】:2016-07-18 05:30:06
【问题描述】:

所以,我有一个 Maven 配置文件,它为我的 JPA 实体 (ClassName.java) 生成我的 StaticMetaModel (ClassName_.java) 类。

然后,我定义了我的 maven-clean-plugin 以在每次运行 mvn clean 时删除那些生成的类。

<plugin>
    <artifactId>maven-clean-plugin</artifactId>
    <version>2.5</version>
    <configuration>
        <filesets>
            <fileset>
                <directory>${basedir}/src/main/java</directory>
                <includes>
                    <include>**/*_.java</include>
                </includes>
            </fileset>
        <filesets>
    </configuration>
</plugin>

这是生成 MetaModel 的配置文件。

<plugin>
    <groupId>org.bsc.maven</groupId>
    <artifactId>maven-processor-plugin</artifactId>
    <executions>
        <execution>
            <goals>
                <goal>process</goal>
            </goals>
            <phase>generate-sources</phase>
            <configuration>
                <outputDirectory>src/main/java/</outputDirectory>
                <processors>
                     <processor>org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor</processor>
                </processors>
            </configuration>
        </execution>
    </executions>
    <dependencies>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-jpamodelgen</artifactId>
        <version>${hibernate.version}</version>
        </dependency>
    </dependencies>
</plugin>

一切都按预期工作,但是当我想运行其他配置文件时,我希望 maven clean 以正常配置执行(不删除那些生成的类)。 有没有什么方法可以有两种方法来清理项目并运行自定义的一种,只为生成配置文件?

【问题讨论】:

  • 你试过 maven 配置文件吗?所以你可以做“mvn clean -Pprofile1”
  • @Neil Stockton 是的,我有一个用于生成这些类的配置文件。当我运行 mvn clean install -PgenerateMetaProfile 时,ClassName_.java 文件被删除并重新创建。但是当我运行 mvn clean install -PotherProfile 我不想删除这些类。
  • 生成到src/main/ 通常是错误的方式...生成代码应该在target 文件夹中进行...比你不需要这么奇怪的结构...
  • 您的问题是您在src/main/java 下生成源。 不要那样做。曾经。期间。 如果你不这样做,你现在不会有这个问题。在src/main/java 下进行清理毫无意义,并且违反了所有的良好做法。
  • @Tunaki,我明白这一点,但该配置文件仅用于开发目的。一旦投入生产,它将被完全删除。使用此方法的全部目的是因为有超过 150 个实体,我不想在每次更改某些内容时创建/修改 StaticMetaModel。 MetaModel 正在使用 CriteriaAPI 的其他类中使用,因此我需要它们存在于那里。

标签: java maven jpa build-process pom.xml


【解决方案1】:

我使用@Tunaki 的建议设法解决了这个问题。所以谢谢。这是我的解决方案。

在插件部分,我没有更改 maven-clean-plugin。

<plugin>
    <artifactId>maven-clean-plugin</artifactId>
    <version>2.5</version>
</plugin>

然后,在配置文件部分,我在新的 src-gen/main/java 文件夹中定义了生成配置文件以生成源代码。我需要先删除生成的源,所以我为这个配置文件配置了干净的插件来删除 src-gen 文件夹。

<profile>
        <id>hibernate-processor</id>
        <properties>
            <environment.id>hibernate-processor</environment.id>
        </properties>
        <build>
            <plugins>
                <plugin>
                    <artifactId>maven-clean-plugin</artifactId>
                    <version>2.5</version>
                    <configuration>
                        <filesets>
                            <fileset>
                                <directory>src-gen</directory>
                                <includes>
                                    <include>**/*</include>
                                </includes>
                                <followSymlinks>false</followSymlinks>
                            </fileset>
                        </filesets>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.bsc.maven</groupId>
                    <artifactId>maven-processor-plugin</artifactId>
                    <executions>
                        <execution>
                            <goals>
                                <goal>process</goal>
                            </goals>
                            <phase>generate-sources</phase>
                            <configuration>
                                <outputDirectory>src-gen/main/java</outputDirectory>
                                <processors>
                                    <processor>org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor</processor>
                                </processors>
                            </configuration>
                        </execution>
                    </executions>
                    <dependencies>
                        <dependency>
                            <groupId>org.hibernate</groupId>
                            <artifactId>hibernate-jpamodelgen</artifactId>
                            <version>${hibernate.version}</version>
                        </dependency>
                    </dependencies>
                </plugin>
            </plugins>
        </build>
    </profile>

之后,正如@Tunaki 所说,我使用 build-helper-maven-plugin 将 src-gen/main/java 添加为源文件夹。

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <version>1.8</version>
    <executions>
        <execution>
            <id>add-source</id>
            <phase>generate-sources</phase>
            <goals>
                <goal>add-source</goal>
            </goals>
            <configuration>
                <sources>
                    <source>src-gen/main/java/</source>
                </sources>
            </configuration>
        </execution>
    </executions>
</plugin>

最后,我只需要配置 maven-compiler-plugin 来编译 src-gen/main/java 文件夹中的 .java 文件。

<plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.2</version>
    <configuration>
        <source>1.8</source>
        <target>1.8</target>
        <configuration>
            <includes>
                <include>src/main/java/**/*.java</include>
                <include>src-gen/main/java/**/*.java</include>
            </includes>
        </configuration>
    </configuration>
</plugin>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多