Maven custom wagon Не удалось проверить целостность загрузки.

Я реализовал пользовательский универсал Maven, взаимодействующий с облачным хранилищем. Файлы успешно загружены в облачное хранилище, и контрольные суммы верны.

md5 файла maven-metadata.xml соответствует содержимому файла maven-metadata.xml.md5

То же самое происходит с файлами jar и pom

  1. md5 файла jar соответствует содержимому *.jar.md5
  2. md5 файла maven-metadata.xml соответствует содержимому файла maven-metadata.xml.md5
  3. md5 из pom соответствует содержимому *.pom.md5

Когда я получаю файлы через http, а не с помощью пользовательского фургона, они загружаются без каких-либо исключений проверки контрольной суммы.

Однако когда я получаю файлы с помощью пользовательского фургона, я получаю предупреждения о целостности загрузки.

[WARNING] Could not validate integrity of download from gs://mavenbucket/snapshot/com/gkatzioura/storage/CloudStorageTest/1.0-SNAPSHOT/maven-metadata.xml
 org.eclipse.aether.transfer.ChecksumFailureException: Checksum validation failed, expected 7e0c3c33db781362483c0baed3ba175352945028 but is da39a3ee5e6b4b0d3255bfef95601890afd80709
at org.eclipse.aether.connector.basic.ChecksumValidator.validateExternalChecksums (ChecksumValidator.java:174)
at org.eclipse.aether.connector.basic.ChecksumValidator.validate (ChecksumValidator.java:103)
at org.eclipse.aether.connector.basic.BasicRepositoryConnector$GetTaskRunner.runTask (BasicRepositoryConnector.java:456)
at org.eclipse.aether.connector.basic.BasicRepositoryConnector$TaskRunner.run (BasicRepositoryConnector.java:360)
at org.eclipse.aether.util.concurrency.RunnableErrorForwarder$1.run (RunnableErrorForwarder.java:75)
at org.eclipse.aether.connector.basic.BasicRepositoryConnector$DirectExecutor.execute (BasicRepositoryConnector.java:583)
at org.eclipse.aether.connector.basic.BasicRepositoryConnector.get (BasicRepositoryConnector.java:232)

После того, как артефакт успешно загружен через пользовательский фургон, я проверяю md5 файлов, загруженных из облачного хранилища, и они совпадают с файлом *.md5 в облачном хранилище.

Как происходит устранение этой проблемы и как я могу ее отладить?

1 ответ

Решение

Причина, по которой это происходило, была в том, что не вызывали метод TransferProgress в TransferListeners.

Чтобы сделать это, вы должны предоставить механизм, чтобы при копировании вашего OutputStream (при загрузке) и InputStream (при загрузке) также вызывался метод TransferProgress.

Например

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.maven.wagon.events.TransferEvent;
import org.apache.maven.wagon.events.TransferListener;

public class WrappedOutputStreamExample extends FileOutputStream {

    private TransferListener transferListener;

    public WrappedOutputStreamExample(File file,TransferListener transferListener) throws FileNotFoundException {
        super(file);
        this.transferListener = transferListener;
    }

    @Override
    public void write(int b) throws IOException {
        super.write(b);
        TransferEvent transferEvent = null; //provide corrent transfer event
        this.transferListener.transferProgress(transferEvent,new byte[]{(byte) b}, 1);
    }

    @Override
    public void write(byte b[]) throws IOException {
        super.write(b);
        TransferEvent transferEvent = null; //provide corrent transfer event
        this.transferListener.transferProgress(transferEvent,b, b.length);
    }

    @Override
    public void write(byte b[], int off, int len) throws IOException {
        TransferEvent transferEvent = null; //provide corrent transfer event

        super.write(b, off, len);
        if (off == 0) {
            this.transferListener.transferProgress(transferEvent,b, len);
        } else {
            byte[] bytes = new byte[len];
            System.arraycopy(b, off, bytes, 0, len);
            this.transferListener.transferProgress(transferEvent,bytes, len);
        }
    }

}
Другие вопросы по тегам