Maven beni kodlama konusunda neden uyarıyor?


99

Amacım, bir projeden bir arketip oluşturmak.

Maven-archetype-eklentisini içermeyen bir hedef çalıştırdığımda herhangi bir uyarı göremiyorum:

[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]

Öte yandan, archetype: create-from-project'i çalıştırdığımda, bir çift alıyorum:

[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

"Standart" maven yolunun project.build.sourceEncodingmülkü kullanmak olduğunu biliyorum . Bu sorunu çözmek için pom'a birkaç özellik daha eklemeyi denedim ama hiçbiri işe yaramadı.

Herhangi bir fikir? Teşekkürler.

Aşağıdaki pom.xml'ye sahibim:

<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>

Yanıtlar:


18

Hedefi çalıştırdığınızda archetype:create-from-project, Maven arketipi oluşturmak için bir POM dosyası oluşturur target/generated-sources/archetype/pom.xmlve ardından packagehedefi (varsayılan olarak) bu POM'da çalıştırır.

Oluşturulan POM dosyasında project.build.sourceEncodingkodlama tanımlayan başka bir özellik yok ve bu yüzden uyarıyı alıyorsunuz.

POM oluşturulur bu prototip ile org.apache.maven.archetype.creator.FilesetArchetypeCreator#createArchetypeProjectPomve bu kodun kaynaklanan POM dosyasına özelliklerini eklemek için bir yol olarak görünmüyor.


148

Sen belirlemediniz kodlayan varsayılan böyle özellik:

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

Bu yaklaşım, her eklenti için kodlamayı manuel olarak tanımlamaktan daha iyidir, tüm eklentilerin kodlama için varsayılan değerlere sahip olmasına neden olur , örneğin maven-kaynaklar-eklentisi :

encoding:

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

Yani bu, yalnızca bu özelliği tanımlamanız gerektiği ve eklentinin bu kodlamayı otomatik olarak kullanacağı anlamına gelir.


1
Ben kurdum. Ponponuma bak. Teşekkürler
Marco Ferrari

1
Eklenti yapılandırmalarındaki girişleri kaldırabilirsiniz <encoding>${encoding}</encoding>.
khmarbaise

1
Tamam. Sorunun çözülüp çözülmediğini görmek için bu girişleri ekledim, ancak şans yok
Marco Ferrari

Yedeklemenin UTF-8 yerine neden platform kodlamasını kullandığını anlamıyorum. Miras yardımı?
msa

@msa, tüm platformlarda varsayılan olarak UTF-8'e sahip değildir. En basit örnek Windows.
khmarbaise

35

Yukarıdaki girişten sonra Maven'in şikayet etmeye devam ettiğini görmek beni rahatsız etti.

Sonra bunun arızasız bir eklenti olduğunu ve kendi özelliğine ihtiyacı olduğunu fark ettim.

İşte gidiyor

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.