Maven: Repository-Element wurde im POM innerhalb von DistributionManagement nicht angegeben?

75

Ich versuche, den Befehl auszuführen mvn release:perform, erhalte jedoch die folgende Fehlermeldung:

Failed to execute goal
org.apache.maven.plugins:maven-deploy-plugin:2.5:deploy
(default-deploy) on project git-demo:
Deployment failed: repository element
was not specified in the POM inside
distributionManagement element or in
-DaltDeploymentRepository=id::layout::url
parameter

Hier ist meine pom.xmlDatei:

<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>com.sonatype.blog</groupId>
    <artifactId>git-demo</artifactId>
    <packaging>jar</packaging>
    <version>1.1-SNAPSHOT</version>
    <name>git-demo</name>
    <url>http://maven.apache.org</url>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <scm>
        <connection>scm:git:[email protected]:Christian-Achilli-KP/git-demo.git</connection>
        <url>scm:git:[email protected]:Christian-Achilli-KP/git-demo.git</url>
        <developerConnection>scm:git:[email protected]:Christian-Achilli-KP/git-demo.git</developerConnection>
    </scm>

    <distributionManagement>
        <!-- use the following if you're not using a snapshot version. -->
        <repository>
            <id>localSnap</id>
            <name>RepositoryProxyRel</name>
            <url>http://127.0.0.1:8080/nexus/content/repositories/releases/</url>
        </repository>
        <!-- use the following if you ARE using a snapshot version. -->
        <snapshotRepository>
            <id>MylocalSnap</id>
            <name>RepositoryProxySnap</name>
            <url>http://127.0.0.1:8080/nexus/content/repositories/snapshots/</url>
        </snapshotRepository>
    </distributionManagement>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-release-plugin</artifactId>
                <version>2.1</version>
            </plugin>
        </plugins>
    </build>
</project>

Eigentlich kann ich das sehen

Repository

Erklärung innerhalb der

DistributionManagent

Etikett.

Hier ist mein settings.xml:

<settings>
    <servers>
        <server>
            <id>localSnap</id>
            <username>deployment</username>
            <password>****</password>
        </server>

        <server>
            <id>MylocalSnap</id>
            <username>deployment</username>
            <password>****</password>
        </server>

        <server>
            <id>myserver</id>
            <username>tomcat</username>
            <password>tomcat</password>
        </server>
    </servers>
    <mirrors>
        <mirror>
            <!--This sends everything else to /public -->
            <id>nexus</id>
            <mirrorOf>*</mirrorOf>
            <url>http://127.0.0.1:8080/nexus/content/groups/public/</url>
        </mirror>
    </mirrors>
    <profiles>
        <profile>
            <id>nexus</id>
            <properties>
                <project.build.sourceEncoding>MacRoman</project.build.sourceEncoding>
                <project.reporting.outputEncoding>MacRoman</project.reporting.outputEncoding>
            </properties>

            <!--Enable snapshots for the built in central repo to direct -->
            <!--all requests to nexus via the mirror -->
            <repositories>
                <repository>
                    <id>central</id>
                    <url>http://central</url>
                    <releases><enabled>true</enabled></releases>
                    <snapshots><enabled>true</enabled></snapshots>
                </repository>
            </repositories>
            <pluginRepositories>
                <pluginRepository>
                    <id>central</id>
                    <url>http://central</url>
                    <releases><enabled>true</enabled></releases>
                    <snapshots><enabled>true</enabled></snapshots>
                </pluginRepository>
            </pluginRepositories>
        </profile>
    </profiles>

    <activeProfiles>
        <activeProfile>nexus</activeProfile>
    </activeProfiles>

</settings>

Irgendwelche Ratschläge, warum es sich beschwert?

Christian Achilli
quelle
Haben Sie mvn release angerufen: Bereiten Sie sich schon vor? und natürlich gibt es identische IDs, die nicht mehr funktionieren.
Khmarbaise
@khmarbaise ja, ich habe mvn: release angerufen und die IDs geändert. Ich werde die Frage mit dem neuen POM aktualisieren
Christian Achilli
Haben Sie .gitignore hinzugefügt, um den Zielordner zu ignorieren? Können Sie Updates an Github senden, die ich mir ansehen kann?
Khmarbaise
@khmarbaise ja, Zielordner wird ignoriert. Hier ist der Git: Git: //github.com/Christian-Achilli-KP/git-demo.git tks!
Christian Achilli
Ich habe ein neues Projekt , das auf Ihre Inhalte in Github setuped und es funktioniert perfekt github.com/khmarbaise/git-demo bis 2,1 die Maven-Release-Plugin aktualisiert , anstatt eine solche alte Version des mit ...
khmarbaise

Antworten:

39

Überprüfen Sie die pom.xmlDatei in target/checkout/. Möglicherweise verfügt das pom.xmlin Ihrem Trunk oder Master-Zweig befindliche distributionManagementTag nicht über das Tag.

Alex
quelle
1
Ein cleanerneuter Versuch hat dies für mich behoben.
Daniel Kaplan
10

Ich habe die gleiche Nachricht erhalten ("Repository-Element wurde im POM innerhalb des DistributionManagement-Elements nicht angegeben"). Ich habe /target/checkout/pom.xml und gemäß einer anderen Antwort überprüft und es hat wirklich gefehlt <distributionManagement>.

Es stellte sich heraus, dass das Problem darin bestand, dass <distributionManagement>in pom.xml in meinem Hauptzweig (mit git) fehlte .

Nach Reinigung ( mvn release:rollback, mvn clean, mvn release:clean, git tag -d v1.0.0) laufe ich mvn releasewieder und es funktionierte.

Mazi
quelle
4

Sie können das Bereitstellungsrepository auch in der Befehlszeile überschreiben: -Darguments=-DaltDeploymentRepository=myreposid::default::http://my/url/releases

Matthew Wise
quelle
2

Die ID der beiden Repos ist beide localSnap; Das ist wahrscheinlich nicht das, was du willst und es könnte Maven verwirren.

Wenn das nicht der Fall ist: Möglicherweise repositoryenthält Ihr POM mehr Elemente. Durchsuchen Sie die Ausgabe von mvn help:effective-pomnach repository, um sicherzustellen, dass die Anzahl und der Ort von ihnen Ihren Erwartungen entsprechen.

Aaron Digulla
quelle
Vielen Dank, ich habe Ihre beiden Ratschläge ausprobiert, aber ich konnte keine funktionierende Lösung finden. Im effektiven POM gibt es zwar eine andere Stelle mit dem <repositories> -Tag, aber es enthält nichts, was mit dem <distributionManagement> -Tag kollidiert. Es gibt hier eine ähnliche Frage stackoverflow.com/questions/4539917/repository-element, aber ich bekomme keine Antwort, wie sie zur Frage passt!
Christian Achilli
1
Ist das ein Multi-Modul-Build? Wenn ja, überprüfen Sie die übergeordneten POMs und Versionen. Möglicherweise haben Sie vergessen, die Versionsnummer zu aktualisieren, und ein Modul verwendet immer noch ein altes übergeordnetes POM.
Aaron Digulla
1

Für mich war dies so einfach wie eine fehlende Version für mein Artefakt - "1.1-SNAPSHOT"

cs94njw
quelle