¿La declaración de dependencia de Maven provoca cambios en el procedimiento de compilación?

Entonces, tengo una aplicación que usa archivos fuente Java y Kotlin (todos ubicados en el /src/main/kotlindirectorio porque eventualmente queremos migrar a Kotlin de todos modos) y que genera un metamodelo de hibernación.

Así que nuestros complementos de compilación maven se ven así:

<build>
    <sourceDirectory>${project.basedir}/src/main/kotlin</sourceDirectory>
    <testSourceDirectory>${project.basedir}/src/test/kotlin</testSourceDirectory>
    <finalName>${project.artifactId}</finalName>
    <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>

            <!--COMPILATION-->
            <plugin>
                <groupId>org.jetbrains.kotlin</groupId>
                <artifactId>kotlin-maven-plugin</artifactId>
                <version>${kotlin.version}</version>
                <executions>
                    <execution>
                        <id>kapt</id>
                        <goals>
                            <goal>kapt</goal>
                        </goals>
                        <configuration>
                            <sourceDirs>
                                <sourceDir>src/main/kotlin</sourceDir>
                            </sourceDirs>
                            <annotationProcessorPaths>
                                <annotationProcessorPath>
                                    <groupId>org.hibernate</groupId>
                                    <artifactId>hibernate-jpamodelgen</artifactId>
                                    <version>${hibernate.version}</version>
                                </annotationProcessorPath>
                            </annotationProcessorPaths>
                        </configuration>
                    </execution>
                    <execution>
                        <id>compile</id>
                        <phase>compile</phase>
                        <goals>
                            <goal>compile</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>test-compile</id>
                        <phase>test-compile</phase>
                        <goals>
                            <goal>test-compile</goal>
                        </goals>
                    </execution>
                </executions>

                <configuration>
                    <jvmTarget>1.8</jvmTarget>

                    <compilerPlugins>
                        <plugin>all-open</plugin>
                        <plugin>jpa</plugin>
                        <plugin>spring</plugin>
                        <plugin>no-arg</plugin>
                    </compilerPlugins>
                    <args>
                        <arg>-Xjsr305=strict</arg>
                    </args>

                    <pluginOptions>
                        <!-- Each annotation is placed on its own line -->
                        <option>all-open:annotation=javax.ejb.Stateless</option>
                        <option>no-arg:annotation=javax.ejb.Stateless</option>

                        <option>all-open:annotation=javax.ws.rs.ext.Provider</option>
                        <option>no-arg:annotation=javax.ws.rs.ext.Provider</option>

                    </pluginOptions>
                </configuration>

                <dependencies>
                    <dependency>
                        <groupId>org.jetbrains.kotlin</groupId>
                        <artifactId>kotlin-maven-allopen</artifactId>
                        <version>${kotlin.version}</version>
                    </dependency>
                    <dependency>
                        <groupId>org.jetbrains.kotlin</groupId>
                        <artifactId>kotlin-maven-noarg</artifactId>
                        <version>${kotlin.version}</version>
                    </dependency>
                </dependencies>
            </plugin>
            <plugin>
                <!-- Check https://kotlinlang.org/docs/reference/using-maven.html#compiling-kotlin-and-java-sources -->
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.5.1</version>
                <executions>
                    <!-- Replacing default-compile as it is treated specially by maven -->
                    <execution>
                        <id>default-compile</id>
                        <phase>none</phase>
                    </execution>
                    <!-- Replacing default-testCompile as it is treated specially by maven -->
                    <execution>
                        <id>default-testCompile</id>
                        <phase>none</phase>
                    </execution>
                    <execution>
                        <id>java-compile</id>
                        <phase>compile</phase>
                        <goals> <goal>compile</goal> </goals>
                    </execution>
                    <execution>
                        <id>java-test-compile</id>
                        <phase>test-compile</phase>
                        <goals> <goal>testCompile</goal> </goals>
                    </execution>
                </executions>
            </plugin>
            <!--END COMPILATION-->

            <!-- ... -->    
    </plugins>
</build>

esto resulta en

[WARNING] Duplicate source root: /home/cypherk/code/myapp/target/generated-sources/kapt/compile
[WARNING] Duplicate source root: /home/cypherk/code/myapp/target/generated-sources/kaptKotlin/compile

que no tengo idea de por qué pero puede estar relacionado.

Si no declaro una dependencia a

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-jpamodelgen</artifactId>
    <version>${hibernate.version}</version>
</dependency>

debajo <dependencies>, está bien, todo se genera de la forma en que se supone que debe generarse /target/generated-sources/kapt/compile/. ( /target/generated-sources-kaptKotlin/compilese genera pero permanece vacío).

Sin embargo, si yo hago declarar la virtud de la dependencia <dependencies>, el java (pero no Kotlin) entidades se generará una segunda vez en /target/generated-sources/annotations/, lo que dará lugar a un error de compilación porque todas las clases generadas basadas en Java tienen una duplicate classen el Kapt carpeta.

No soy un experto en Maven, solo lo uso porque eso es lo que se supone que debemos usar para el proyecto. Como tal, me parece simplemente declarar que una dependencia que tiene dicho efecto es extremadamente poco intuitiva.

¿Alguien podría explicarme por qué sucede esto?

Respuesta 1

¿Hay algún sitio con una explicación completa del algoritmo CLAHE y tal vez algún código de muestra? Hasta ahora solo he encontrado el código para matlab sin explicación y necesito implementar el mío (...

Estoy tratando de extraer una palabra después de una palabra dada. por ejemplo: si mi cadena es "http: // localhost: 8080 / api / rest / loan / application / 1007 / solicitante / 951 / pan", entonces quiero extraer la palabra que viene después ...

Estoy desarrollando una aplicación C # para ejecutar pruebas JUnit automáticamente. Como es complicado mover la ubicación actual donde se ejecuta mi aplicación C #, necesito ejecutar las pruebas JUnit sin ...

Al usar el operador ternario, es muy conveniente escribir código como String name = employee.getName ()! = Null? employee.getName (): ""; que (la mayoría de las veces) un código más eficiente como String ...