Warum warnt mich Maven vor dem Kodieren?

Lesezeit: 4 Minuten

Benutzer-Avatar
Marco Ferrari

Mein Ziel ist es, aus einem Projekt einen Archetyp zu erschaffen.

Wenn ich ein Ziel ausführe, das das maven-archetype-plugin nicht beinhaltet, sehe ich keine Warnung:

[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ maven-archetype-base ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ maven-archetype-base ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 0 resource
[INFO]

Am anderen Ende, wenn ich archetype:create-from-project ausführe, bekomme ich ein paar:

[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ maven-archetype-base-archetype ---
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 10 resources
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ maven-archetype-base-archetype ---
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 2 resources

Ich weiß, dass der “Standard”-Maven-Weg darin besteht, die zu verwenden project.build.sourceEncoding Eigentum. Ich habe versucht, dem Pom weitere Eigenschaften hinzuzufügen, um dieses Problem zu beheben, aber keine davon hat funktioniert.

Irgendwelche Ideen? Vielen Dank.

Ich habe die folgende pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>my.group.id</groupId>
<artifactId>my-artifact</artifactId>
<version>0.0.1</version>
<packaging>maven-archetype</packaging>

<properties>

    <!-- Compiler properties -->
    <maven.compiler.target>1.7</maven.compiler.target>
    <maven.compiler.source>1.7</maven.compiler.source>
    <encoding>UTF-8</encoding>
    <project.build.sourceEncoding>${encoding}</project.build.sourceEncoding>
    <project.reporting.outputEncoding>${encoding}</project.reporting.outputEncoding>
    <project.resources.sourceEncoding>${encoding}</project.resources.sourceEncoding>
    <archetype.encoding>${encoding}</archetype.encoding>

    <!-- Maven plugins version -->
    <maven-archetype-plugin-version>2.2</maven-archetype-plugin-version>
    <maven-resources-plugin-version>2.6</maven-resources-plugin-version>

    <!-- Maven extentions version -->
    <maven-archetype-packaging-extension-version>2.2</maven-archetype-packaging-extension-version>
</properties>
<dependencies>
[...]
</dependencies>

<build>
    <extensions>
        <extension>
            <groupId>org.apache.maven.archetype</groupId>
            <artifactId>archetype-packaging</artifactId>
            <version>${maven-archetype-packaging-extension-version}</version>
        </extension>
    </extensions>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <version>${maven-resources-plugin-version}</version>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-archetype-plugin</artifactId>
            <version>${maven-archetype-plugin-version}</version>
            <extensions>true</extensions>
        </plugin>

    </plugins>

    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
    </resources>
</build>

Sie haben die nicht eingestellt Kodierungsstandard Eigenschaft so:

<project>
  ...
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
  ...
</project>

Dieser Ansatz ist besser, als die Codierung manuell für jedes Plugin zu definieren, da alle Plugins Standardwerte für haben Kodierung zum Beispiel das maven-resources-plugin:

encoding:

The character encoding scheme to be applied when filtering resources.
Type: java.lang.String
Required: No
User Property: encoding
Default: ${project.build.sourceEncoding}

Das bedeutet also, dass Sie nur diese Eigenschaft definieren müssen und das Plugin wird automatisch diese Kodierung verwenden.

  • Ich habe es eingestellt. Schau dir meinen Pom an. Vielen Dank

    – Marco Ferrari

    10. Juni 2014 um 19:56 Uhr

  • Sie können die Einträge in den Plugin-Konfigurationen entfernen <encoding>${encoding}</encoding>.

    – khmarbaise

    11. Juni 2014 um 6:15 Uhr

  • OK. Ich habe diese Einträge hinzugefügt, um zu sehen, ob das Problem dadurch gelöst wurde, aber kein Glück

    – Marco Ferrari

    11. Juni 2014 um 6:55 Uhr

  • Ich verstehe nicht, warum der Fallback die Plattformcodierung anstelle von UTF-8 verwendet. Legacy-Unterstützung?

    – msa

    11. Februar 2020 um 21:21 Uhr

  • @msa, weil nicht alle Plattformen UTF-8 als Standard haben. Einfachstes Beispiel Windows.

    – khmarbaise

    13. Juli 2020 um 19:27 Uhr

Benutzer-Avatar
Kalpesh Soni

Es hat mich geärgert zu sehen, dass sich Maven nach dem obigen Eintrag immer wieder beschwert hat

Dann wurde mir klar, dass es das ausfallsichere Plugin ist und eine eigene Eigenschaft benötigt

Hier geht es also

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>

Wenn Sie das Ziel laufen archetype:create-from-projectgeneriert Maven eine POM-Datei zum Erstellen des Archetyps unter target/generated-sources/archetype/pom.xml und dann läuft die package Ziel (standardmäßig) auf diesem POM.

Die generierte POM-Datei hat keine project.build.sourceEncoding oder eine andere Eigenschaft, die die Codierung definiert, und deshalb erhalten Sie die Warnung.

Das POM wird generiert aus dieser Prototyp durch org.apache.maven.archetype.creator.FilesetArchetypeCreator#createArchetypeProjectPomund aus diesem Code scheint es keine Möglichkeit zu geben, der resultierenden POM-Datei Eigenschaften hinzuzufügen.

1333130cookie-checkWarum warnt mich Maven vor dem Kodieren?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy