Maven "чистая установка" завершается неудачно при обновлении maven с 3.1.1 до 3.3.3

Я пытаюсь создать лайткойн-кошелек для Android, который я клонировал с github: https://github.com/Litecoin-Java/bitcoin-wallet

Я бился головой о стену в течение нескольких дней, потому что попытка построить эту вещь постоянно вызывает все больше и больше ошибок. В инструкциях на github просто написано "mvn clean install", но для меня это не так просто. Я впервые использую Maven, а также впервые делаю что-либо с библиотекой bitcoinj.

Это как бы две проблемы в одной, потому что я также сталкиваюсь с ошибками, когда пытаюсь установить зависимость bitcoinj на v0.12.3 (самая последняя) вместо v0.10.3 (очень старая...)

После нескольких дней я наконец получил его на работу после нескольких изменений:

  • Использование Maven 3.1.1 вместо последней версии, Maven 3.3.3
  • Установка зависимости bitcoinj как v0.10.3 в POM моего проекта вместо последней версии v0.12.3
  • Исправление POM, такое как изменение версии maven-android-plugin на 3.8 (это исправило некоторые ошибки) и установка source,target=1.7 для
    maven-compiler-plugin в POM (это также исправляло ошибки, которые я получал
    с проблемами при компиляции проекта)

Переменные среды, такие как HOME_JAVA и ANDROID_HOME, были установлены правильно. Я также удостоверился, что добавил maven, androidsdk/tools и /platform-tools в мою PATH.

Я использую Ubuntu 14.04.

Запустив maven 3.1.1 и bitcoinj v0.10.3, я получаю

[INFO] base .............................................. SUCCESS [0.384s]
[INFO] Bitcoin Integration for Android ................... SUCCESS [1.448s]
[INFO] Bitcoin Wallet .................................... SUCCESS [49.624s]
[INFO] Sample for Bitcoin Integration for Android ........ SUCCESS [2.128s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS

Обновление до maven 3.3.3 (при использовании bitcoinj v0.10.3) я получаю:

[INFO] base ............................................... SUCCESS [  0.453 s]
[INFO] Bitcoin Integration for Android .................... SUCCESS [  1.937 s]
[INFO] Bitcoin Wallet ..................................... FAILURE [ 41.376 s]
[INFO] Sample for Bitcoin Integration for Android ......... SKIPPED
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 45.952 s
[INFO] Finished at: 2015-05-22T11:23:01+00:00
[INFO] Final Memory: 29M/332M
[INFO] ------------------------------------------------------------------------
[ERROR] Unable to provision, see the following errors:
[ERROR] 
[ERROR] 1) No implementation for org.eclipse.aether.connector.wagon.WagonProvider was bound.
[ERROR] while locating org.eclipse.aether.connector.wagon.WagonRepositoryConnectorFactory
[ERROR] at ClassRealm[extension>com.jayway.maven.plugins.android.generation2:android-maven-plugin:3.8.0, parent: sun.misc.Launcher$AppClassLoader@665ce0fe] (via modules: org.eclipse.sisu.wire.WireModule -> org.eclipse.sisu.plexus.PlexusBindingModule)
[ERROR] at ClassRealm[extension>com.jayway.maven.plugins.android.generation2:android-maven-plugin:3.8.0, parent: sun.misc.Launcher$AppClassLoader@665ce0fe] (via modules: org.eclipse.sisu.wire.WireModule -> org.eclipse.sisu.plexus.PlexusBindingModule)
[ERROR] while locating org.eclipse.aether.spi.connector.RepositoryConnectorFactory annotated with @com.google.inject.name.Named(value=wagon)
[ERROR] 
[ERROR] 1 error

Установив версию зависимости bitcoinj от 0.12.3, я получаю:

[ERROR] Failed to execute goal on project wallet: Could not resolve dependencies for project de.schildbach.wallet:wallet:apk:3.29-test: Could not find artifact com.google:bitcoinj:jar:0.12.3 in central (http://repo.maven.apache.org/maven2) -> 

Нет, это означает, что мне нужно самому получить и собрать 0.12.3, но я не знаю, как сообщить моему проекту, где найти мою собственную версию.

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

Вот POM для всего проекта:

<?xml version="1.0" encoding="UTF-8"?>
<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/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>de.schildbach.wallet</groupId>
    <artifactId>base</artifactId>
    <name>base</name>
    <version>1</version>
    <packaging>pom</packaging>

    <modules>
        <module>wallet</module>
        <module>integration-android</module>
        <module>sample-integration-android</module>
    </modules>

    <build>

        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
            </plugin>
        </plugins>

        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-clean-plugin</artifactId>
                    <version>2.5</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.1</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-resources-plugin</artifactId>
                    <version>2.6</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>2.15</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-source-plugin</artifactId>
                    <version>2.2.1</version>
                    <executions>
                        <execution>
                            <goals>
                                <goal>jar</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>com.jayway.maven.plugins.android.generation2</groupId>
                    <artifactId>android-maven-plugin</artifactId>
                    <version>3.8.0</version>
                    <configuration>
                        <genDirectory>${basedir}/gen</genDirectory>
                    </configuration>
                    <extensions>true</extensions>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-eclipse-plugin</artifactId>
                    <version>2.9</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-site-plugin</artifactId>
                    <version>3.3</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-project-info-reports-plugin</artifactId>
                    <version>2.7</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-dependency-plugin</artifactId>
                    <version>2.8</version>
                </plugin>
            </plugins>
        </pluginManagement>

    </build>

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

</project>

Вот POM для папки "кошелек", в частности:

<?xml version="1.0" encoding="UTF-8"?>
<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/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <artifactId>wallet</artifactId>
    <packaging>apk</packaging>
    <version>3.29-test</version>
    <name>Bitcoin Wallet</name>

    <parent>
        <groupId>de.schildbach.wallet</groupId>
        <artifactId>base</artifactId>
        <version>1</version>
    </parent>

    <dependencies>

        <!-- android.*, java.*, javax.* -->
        <dependency>
            <groupId>com.google.android</groupId>
            <artifactId>android</artifactId>
            <version>4.0.1.2</version>
            <scope>provided</scope>
        </dependency>

        <!-- android.annotation.* -->
        <dependency>
            <groupId>com.google.android</groupId>
            <artifactId>annotations</artifactId>
            <!-- version should match android artifact, but not available on maven central -->
            <version>4.1.1.4</version>
            <scope>provided</scope>
        </dependency>

        <!-- android.support.v4.* -->
        <dependency>
            <groupId>com.google.android</groupId>
            <artifactId>support-v4</artifactId>
            <version>r7</version>
        </dependency>

        <!-- com.actionbarsherlock.* -->
        <dependency>
            <groupId>com.actionbarsherlock</groupId>
            <artifactId>library</artifactId>
            <version>4.1.0</version>
            <type>apklib</type>
        </dependency>

        <!-- com.google.bitcoin.* -->
        <dependency>
            <groupId>com.google</groupId>
            <artifactId>bitcoinj</artifactId>
            <version>0.12.3</version>
        </dependency>

        <!-- de.schildbach.wallet.integration.android.* -->
        <dependency>
            <groupId>de.schildbach.wallet</groupId>
            <artifactId>integration-android</artifactId>
            <version>1.0</version>
        </dependency>

        <!-- com.google.zxing.* -->
        <dependency>
            <groupId>com.google.zxing</groupId>
            <artifactId>core</artifactId>
            <version>2.2</version>
        </dependency>

        <!-- org.slf4j.* -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.5</version>
        </dependency>

        <!-- ch.qos.logback.classic.* -->
        <dependency>
            <groupId>com.github.tony19</groupId>
            <artifactId>logback-android-classic</artifactId>
            <version>1.0.10-2</version>
        </dependency>

        <!-- ch.qos.logback.core.* -->
        <dependency>
            <groupId>com.github.tony19</groupId>
            <artifactId>logback-android-core</artifactId>
            <version>1.0.10-2</version>
        </dependency>

        <!-- javax.annotation.* -->
        <dependency>
            <groupId>com.google.code.findbugs</groupId>
            <artifactId>jsr305</artifactId>
            <version>2.0.1</version>
        </dependency>

        <!-- org.junit.* -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>

    </dependencies>

    <profiles>
        <profile>
            <id>release</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>com.jayway.maven.plugins.android.generation2</groupId>
                        <artifactId>android-maven-plugin</artifactId>
                        <configuration>
                            <release>true</release>
                            <proguard>
                                <skip>false</skip>
                            </proguard>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>

    <!-- to build, run: mvn clean install -->
    <!-- then to install on an android device, run: mvn android:deploy -->
    <build>
        <sourceDirectory>src</sourceDirectory>
        <testSourceDirectory>test</testSourceDirectory>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>com.jayway.maven.plugins.android.generation2</groupId>
                <artifactId>android-maven-plugin</artifactId>
                <version>3.8.2</version>
                <configuration>
                    <excludeJarResources>
                        <excludeJarResource>.*\.jar$</excludeJarResource>
                    </excludeJarResources>
                    <sdk>
                        <platform>14</platform>
                    </sdk>
                    <sign>
                        <debug>both</debug>
                    </sign>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-eclipse-plugin</artifactId>
                <configuration>
                    <downloadSources>true</downloadSources>
                    <downloadJavadocs>false</downloadJavadocs>
                    <additionalProjectnatures>
                        <projectnature>com.android.ide.eclipse.adt.AndroidNature</projectnature>
                    </additionalProjectnatures>
                    <additionalBuildcommands>
                        <buildcommand>com.android.ide.eclipse.adt.ResourceManagerBuilder</buildcommand>
                        <buildcommand>com.android.ide.eclipse.adt.PreCompilerBuilder</buildcommand>
                        <buildcommand>com.android.ide.eclipse.adt.ApkBuilder</buildcommand>
                    </additionalBuildcommands>
                    <classpathContainers>
                        <classpathContainer>com.android.ide.eclipse.adt.ANDROID_FRAMEWORK</classpathContainer>
                        <!-- This is a workaround: we do not want JRE_CONTAINER, however if we remove it, it will be automatically added, and 
                            placed first. So we add it in the second position, so that the project is recognized as an Android project. -->
                        <classpathContainer>org.eclipse.jdt.launching.JRE_CONTAINER</classpathContainer>
                    </classpathContainers>
                    <excludes>
                        <exclude>android:android</exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <!-- to generate reports, run: mvn clean install site -->
    <!-- then browse to: target/site/index.html -->
    <reporting>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>findbugs-maven-plugin</artifactId>
                <version>2.5.2</version>
                <configuration>
                    <onlyAnalyze>de.schildbach.wallet.-</onlyAnalyze>
                </configuration>
            </plugin>
        </plugins>
    </reporting>

</project>

Спасибо за вашу помощь.

2 ответа

Решение

Похоже, что для версии 0.12.3 зависимости изменили groupid.

Вот новая зависимость:

<dependency>
  <groupId>org.bitcoinj</groupId>
  <artifactId>bitcoinj-core</artifactId>
  <version>0.12.3</version>
  <scope>compile</scope>
</dependency>

Вы можете проверить это здесь (Maven Central) и здесь (сайт bitcoinj).

Существует некоторая проблема совместимости для Maven 3.2 и 3.3. Пожалуйста, используйте Maven 3.1 . Попробуй это:

brew install homebrew/versions/maven31
sudo ln -s /usr/local/Cellar/maven31/3.1.1 /usr/local/Cellar/maven/
brew switch maven 3.1.1
Другие вопросы по тегам