web-dev-qa-db-fra.com

Maven - Supprimez [AVERTISSEMENT] Le fichier JAR sera vide - aucun contenu n'a été marqué pour inclusion dans pom.xml.

Mon projet maven intentionnellement n'a besoin que de src/test/Java et src/test/resources. Après avoir supprimé les dossiers src/main/*, l'avertissement attendu s'est affiché le mvn verify:

[WARNING] JAR will be empty - no content was marked for inclusion!
[INFO] Building jar: D:\dev\Java\my-project\target\my-project-0.0.1-SNAPSHOT.jar

Comment supprimer cet avertissement en dehors du fait d'avoir une classe avec une méthode main() vide dans src/main/Java?

MODIFIER:

Comme -q supprime l'avertissement, un suivi serait possible si cela peut être fait par programme dans le pom.xml?

9
silver

L’avertissement dépend en fait de la possibilité de trouver le <classesDirectory> configuré - par défaut target\classes.

Cela signifie qu'un moyen simple de contourner l'avertissement consiste à le pointer vers un autre répertoire volontairement vide:

<build>
    <plugins>
        <plugin>
            <artifactId>maven-jar-plugin</artifactId>
            <configuration>
                <classesDirectory>dummy</classesDirectory>
            </configuration>
        </plugin>
    </plugins>
</build>

Sinon, pour éviter d'avoir besoin du répertoire vide, excluez tout d'un autre répertoire:

        <plugin>
            <artifactId>maven-jar-plugin</artifactId>
            <configuration>
                <classesDirectory>src</classesDirectory>
                <excludes>
                    <exclude>**</exclude>
                </excludes>
            </configuration>
        </plugin>
3
df778899

Les deux solutions ont supprimé le message d'avertissement par programme.

Solution 1:

<!-- https://mvnrepository.com/artifact/org.Apache.maven.plugins/maven-jar-plugin -->
<plugin>
    <groupId>org.Apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>3.1.0</version>
    <!-- Ignore src/main in JAR packaging -->
    <configuration>
        <classesDirectory>src</classesDirectory>
        <excludes>
            <exclude>main</exclude>
        </excludes>
    </configuration>
</plugin>

Solution 2:

Étant donné que ce qui précède a essentiellement créé un fichier JAR vide (et que je ne voulais pas vraiment inclure de classes de test ni de ressources de test), j'ai choisi de "sauter" la création du fichier JAR.

Quel est le meilleur moyen d'éviter Maven-jar?

<plugin>
    <groupId>org.Apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>3.1.0</version>
    <executions>
        <execution>
            <id>default-jar</id>
            <phase>none</phase>
        </execution>
    </executions>
</plugin>
2
silver

Si tout ce que vous essayez de faire est de rassembler les dépendances, vous pouvez ajouter <packaging>pom</packaging> pour remplacer le package JAR par défaut.

Cependant, en fonction du contexte de votre question, avoir les dossiers src/test/Java et src/test/resources m'amène à croire que vous avez un composant qui n'est que des tests? Changer d’emballage en pom empêcherait les tests d’être exécutés par maven. Si tel est vraiment votre cas d'utilisation, il semblerait que vous essayez de sauter l'emballage. Le meilleur moyen d'y parvenir est de lier le plug-in du package de modules à la phase none, car il n'y a aucun moyen de sauter la phase de package du cycle de vie maven. Ceci est identifié comme la solution 1 ci-dessus. 

0
John Camerin

La solution la plus simple et la plus efficace consiste à conserver le code de test dans src/main/Java. Oui, ce n’est pas une faute de frappe. De plus, s'il s'agit d'un framework de test, celui-ci doit disposer de tests lui-même. Il est donc logique de localiser les tests du code productif du point de vue de l'utilisateur dans src/main/Java et les tests dans src/test/Java.

Du point de vue de l'utilisateur, il s'agira simplement d'un fichier jar dans lequel vous devez définir le <scope>test</scope>.

Cela résoudra tous les problèmes sans configuration supplémentaire ni modification des paramètres par défaut et sans violation des conventions.

0
khmarbaise