2016-05-11 12 views
1

Ich möchte .svn Ordner ausschließen, wenn ich mein Plugin in unserem benutzerdefinierten Artifactory-Repository veröffentliche. Ich gehe davon aus, dass die Aufnahme von .svn Ordnern das Problem ist, das auf der unten angegebenen Fehlermeldung basiert.Ausschließen von Dateien und Ordnern während der Plugin-Veröffentlichung

ich die Veröffentlichung des folgenden Befehl:

gradlew artifactoryPublish --stacktrace

Dies ist der Verlag Block in build.gradle:

artifactory { 
    contextUrl = artifactory_context 
    publish { 
     repository { 
      repoKey = 'plugins-release-local' 
      username = artifactory_user 
      password = artifactory_password 
      maven = true 

     } 
     defaults { 
      publications ('mavenJava') 
     } 
    } 
} 

publishing { 
    publications { 
     mavenJava(MavenPublication) { 
      from components.java 
     } 
    } 
} 

Dies ist der Stack-Trace ich, wenn ich zu veröffentlichen versuchen, beachten Sie die Versuchskopie von .svn/entries zu assets/entries.

... 
:copyAssets FAILED 

FAILURE: Build failed with an exception. 

* What went wrong: 
Execution failed for task ':copyAssets'. 
> Could not copy file '/u01/var/build/pluginXYZ/grails-app/assets/.svn/entries' to '/u01/var/build/pluginXYZ/build/resources/main/META-INF/assets/entries'. 

* Try: 
Run with --info or --debug option to get more log output. 

* Exception is: 
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':copyAssets'. 
... 
Caused by: org.gradle.api.GradleException: Could not copy file '/u01/var/build/pluginXYZ/grails-app/assets/.svn/entries' to '/u01/var/build/pluginXYZ/build/resources/main/META-INF/assets/entries'. 
... 
Caused by: java.io.FileNotFoundException: /u01/var/build/pluginXYZ/build/resources/main/META-INF/assets/entries (Permission denied) 
... 80 more 

Die Erlaubnis auf entries (beide Bäume) sind -r--r--r--.

Wenn ich diese Ordner ausschließe, sollte ich dieses Berechtigungsproblem loswerden. Der erste Checkout wird immer veröffentlicht, aber nachfolgende Publishs (zB nach einem Update) schlagen mit diesem Fehler fehl.

Update # 2

Hier sind die drei Kombination ich ohne Erfolg versucht:

publishing { 
    publications { 
     mavenJava(MavenPublication) { 
      from components.java 
       //first attempt 
       //exclude("**/.svn/**") 
       //second attempt 
       //exclude{ details -> details.file.name.contains(".svn") } 
       //third attempt 
       //exclude "**/.svn/**" 
     } 
    } 
} 

Der Fehlerausgang bei der Veröffentlichung, alle drei Versuche verwendet wird, ist die folgende:

Caused by: org.gradle.api.internal.MissingMethodException: Could not find method exclude() for arguments [build_3nsvrq[email protected]10e9a5fe] on org.gradlpubli[email protected]ca7e37f. 

Aktualisierung # 3

Ich habe folgenden Link gefunden taking about excluding files.

Ich stellte dann meine gradle.build dazu:

publishing { 
    publications { 
     mavenJava(MavenPublication) { 
      from components.java { 
         exclude "**/.svn/**" 
       } 
     } 
    } 
} 

gleichen Fehler.

Update # 4

Weitere Versuche ... gleichen Ergebnisse

publishing { 
    publications { 
     mavenJava(MavenPublication) { 
      from components.java 
      artifact sourceJar{ 
       exclude '**/.svn/**' 
      } 
     } 
    } 
} 

oder

publishing { 
    publications { 
     mavenJava(MavenPublication) { 
      from components.java 
      artifact exclude '**/.svn/**' 
     } 
    } 
} 

Antwort

-1

beigefügt ich folgende auf der obersten Ebene in meinem build.gradle und es scheint zu funktionieren:

sourceSets { 
    main { 
    java { 
     exclude '**/.svn/**' 
    } 
    } 
} 
0

Ich glaube, Sie 'ausschließen' Methode mit Filefilter verwenden können. Fügen Sie es einfach unter 'von' im Veröffentlichungsblock hinzu.

+0

Ich habe versucht 3 verschiedene Konfiguration (siehe Update 2) ohne Erfolg. Ich bin mir nicht sicher, ob ich umgesetzt habe, was Sie vorhatten. – TekiusFanatikus

+0

Es scheint, dass Ihre components.java falsch ist. Versuchen Sie, das Artefakt explizit wie eine Artefaktdatei ("path-to-jar/jar.jar") anzugeben. – user3450486

+0

Nicht zufällig könnte man etwas für mich programmieren? Bisher haben alle Versuche, Artefakte mit exclude anzufügen, den gleichen Fehler. – TekiusFanatikus

1

Sagen Sie, Sie haben eine Datei, die Sie NUR während der Veröffentlichung in das Repository zu vermeiden.Wenn Sie mit gehen wie von @TekiusFanatikus

sourceSets { 
    main { 
    java { 
     exclude '**/.svn/**' 
    } 
    } 
} 

werden Sie in der Lage sein, es zu erreichen, aber dies wird ausschließen auch die Datei/Ordner usw. aus dem Artefakt, das Sie erzeugen mit gradle bauen.

Stattdessen würde ich empfehlen, den Ansatz zu verwenden, wie hier erwähnt gradle documnetation

Sie können eine Aufgabe erstellen, die Ihren gewünschten Ausschluss

angewendet haben
task apiJar(type: Jar) { 
    baseName "publishing-api" 
    from sourceSets.main.output 
    exclude '**/.svn/**' 
} 

und dann die Aufgabe beziehen, während die Veröffentlichung.

publishing { 
    publications { 
     api(MavenPublication) { 
      groupId 'org.gradle.sample' 
      artifactId 'project2-api' 
      version '2' 

      artifact apiJar 
     } 
    } 
} 

Auf diese Weise wird der Jar, der veröffentlicht wird, keinen .svn-Ordner haben. Der Punkt, den ich hier machen wollte, ist, dass es Ihr Artefakt nicht berührt, das mit Gradle Build erstellt wird. Es wird immer noch Ihren .svn-Ordner haben.

Aber wenn Sie wollen, dass es von beiden Orten entfernt wird, dann ist die beste Option wie oben vorgeschlagen.

Verwandte Themen