Πώς κισσού: δημοσιεύει το έργο;

ψήφοι
24

Είμαι σε πλήρη απώλεια τρόπο με τον οποίο το μυρμήγκι έργο κισσός: δημοσιεύει υποτίθεται ότι θα λειτουργήσει.

Θα περίμενα ότι κάνω κανονική κατασκευή μου, η οποία δημιουργεί ένα σωρό αρχεία βάζο, τότε θα ωθήσει αυτά τα βάζα με την (τοπική) αποθετήριο.

Πώς μπορώ να προσδιορίσω από πού να ανακτήσει τα κατασκευαστεί βάζα, και πώς θα εκείνα που καταλήγουν στο αποθετήριο;

Εκσυγχρονίζω:

<target name=publish-local description=--> Publish Local>
    <ivy:retrieve />
    <ivy:publish resolver=local pubrevision=${release.version} status=release update=true overwrite=true>
        <artifacts pattern=${dist.dir}/[organisation]-[module].[ext] />
    </ivy:publish>
</target>

αυτό λειτουργεί πραγματικά, δεν είχα συμπεριλάβει το ανακτήσετε πριν.

Αλλά έχω ακόμα κάποια προβλήματα, ας υποθέσουμε ότι θέλω να δημοσιεύσετε 3 βάζα, openscada-utils.jar, openscada-utils-sources.jar και openscada-utils-javadocs.jar ως openscada-utils-0.9.2.jar, openscada-utils -0.9.2-sources.jar και openscada-utils-0.9.2-javadocs.jar

Δεν είναι απολύτως σαφές για μένα, πώς συναρμολογούνται τα πραγματικά ονόματα, και όπου μπορώ να καθορίσετε ποια ονόματα θα πρέπει να πάρετε. (Χρησιμοποιώντας το θραύσμα παραπάνω, τα βάζα πάντα ονομάζονται μόνο utils.jar).

Ενημέρωση 1:

Πήρα να λειτουργήσει (λίγο), αλλά ακόμα δεν αισθάνεται δεξιά. Κάπως όλα τα μαθήματα επικεντρώνονται στις εξαρτήσεις από τα έργα 3ο μέρος, αλλά εξίσου σημαντικό σημείο για μένα είναι να χειριστεί ειδικές εξαρτήσεις του έργου.

Έχω μια δέσμη των επιμέρους έργων που εξαρτώνται από την άλλη με διάφορους τρόπους. Λαμβάνοντας υπόψη κισσός: δημοσίευση δεν είναι σαφές για μένα πώς να ξεκινήσετε.

  1. Πώς μπορώ να χειριστεί την πρώτη έκδοση; Έχω έναν κοινό αριθμό έκδοσης για όλα τα επιμέρους έργα για να δείξει ότι ανήκουν μαζί (ας πούμε 0.9). Ως εκ τούτου η πρώτη αναθεώρηση θα πρέπει να είναι 0.9.0, αλλά μέχρι στιγμής τίποτα από τα έργα μου είναι στην αποθήκη μου. Πώς μπορώ να πάρω Ivy να εκχωρήσετε αυτό τον αριθμό αναθεώρησης.

  2. Κατά τη διάρκεια της ανάπτυξης θέλω να δημοσιεύουν τις χτίστηκε αρχεία και πάλι, χωρίς να αλλάξετε τον αριθμό αναθεώρησης μέχρι τώρα.

  3. Αν είμαι τελειώσει με τη δουλειά μου θέλω να την ωθήσει σε ένα κοινό αποθετήριο (και να αυξήσει τον αριθμό αναθεώρησης ας πούμε από 0.9.0 έως 0.9.1), ποια είναι η συνιστώμενη προσέγγιση για να το πράξει;

  4. Για μια πραγματική απελευθέρωση, θέλω να κάνω διανομές με εξαρτήσεις και χωρίς, με κάποιο τρόπο υποθέτω ότι μπορώ να χρησιμοποιήσω διαφορετικές διαμορφώσεις για αυτό. Πώς μπορώ να χρησιμοποιήσω προς όφελός μου;

Δημοσιεύθηκε 09/12/2008 στις 17:18
πηγή χρήστη
Σε άλλες γλώσσες...                            


4 απαντήσεις

ψήφοι
9

Θα πρέπει να καθορίσετε το «επίλυσης». Κάτι όπως:

<ivy:publish resolver="local" pubrevision="1.0"/>

Είναι ελέγχεται από το πρότυπο. Αυτή η σελίδα καλύπτει αρκετά καλά. Μοιάζει θέλετε τη δική σας να είναι:

<artifacts pattern="${dist.dir}/[organisation]-[module]-[revision]-[type].[ext]" />

Και θα πρέπει να επισημανθούν τα τρία βάζα, όπως έργα τέχνης στο αρχείο ivy.xml. Κάτι σαν αυτό:

<publications>
    <artifact name="utils"/>
    <artifact name="utils" type="source"/>
    <artifact name="utils" type="javadocs"/>
</publications>
Απαντήθηκε 09/12/2008 στις 17:30
πηγή χρήστη

ψήφοι
4

Κατ 'αρχάς θα πρέπει να έχετε ένα αρχείο ivy.xml.

<ivy-module version="2.0">
    <info organisation="com.example.code" module="MyProject"
         revision="${project.revision}"/>
    <configurations>
        <conf name="runtime" description="" />
        ... other config elements here...
    </configurations>

    <publications defaultconf="runtime">
        <artifact name="MyProject" type="jar" ext="jar" conf="runtime" />
    </publications>

    <dependencies>
        ...
    </dependencies>
</ivy-module>

Τα στοιχεία info στοιχείο και δημοσιεύσεις σε ivy.xml σας επιτρέπουν να παρακάμψετε διάφορα χαρακτηριστικά των στοιχείων κισσού σε build.xml.

Σημειώστε το $ {project.revision} στο ivy.xml. Το ακίνητο δίνεται αξία στην build.xml, αλλά αυτό φαίνεται να λειτουργεί καλά. Η αναθεώρηση μπορεί στη συνέχεια να έχουν εύκολα ό, τι αξία απαιτείται (π.χ.. Νυχτερινό χτίζει έναντι των τοπικών χτίζει).

Εδώ είναι ένα δείγμα το πώς θα μπορούσε να δημιουργήσει αρχείο build.xml σας

<property name="project.revision" value="1.0.0"/>

...

<target name="ivy">
    <ivy:resolve />

    <!-- Possible ivy:report, ivy:retrieve and other
    elements for managing your dependencies go here -->

    <ivy:deliver conf="*(public)"/> 
</target>

<target name="publish" depends="clean, ivy, jar">
    <ivy:publish resolver="local">
        <!-- possible artifacts elements if your artifacts
        are not in standard location -->
    </ivy:publish>
</target>

...
Απαντήθηκε 13/01/2012 στις 17:28
πηγή χρήστη

ψήφοι
2

Είσαι ας υποθέσουμε ότι για να εκτελέσετε την <ivy:deliver/>εργασία για πρώτη φορά. Αυτό δημιουργεί ένα αρχείο ivy.xml που μπορεί να χρησιμοποιηθεί από το αποθετήριο Ivy.

Όταν χρησιμοποιείτε <ivy:publish>μπορείτε να καθορίσετε ποια αποθετήριο που θέλετε να δημοσιεύσετε στο καθορίζοντας το στο resolverπαράμετρο. Αυτό πρέπει να ταιριάζει με το όνομα του αναλυτή που σου ivy.settings.xmlαρχείο.

Δεν καθορίσετε πραγματικά τα αντικείμενα, αλλά ένα σχέδιο πού θα βρείτε τα αντικείμενα για να δημοσιεύσετε. Μπορείτε να καθορίσετε αυτή μέσω του <artifacts>υποεργασίας για το <ivy:publish>έργο. Για παράδειγμα, εάν έχετε χτίσει όλα κάτω από τον ${basedir}/target/archiveκατάλογο, όπως και εμείς, μπορείτε να ορίσετε ως εξής:

<ivy:publish resolver="public">
   <artifacts path="target/archive/[artifact].[ext]"/>
</ivy:publish>

Αν θέλετε να αλλάξετε τον αριθμό αναθεώρηση των αρχείων σας, μπορείτε να χρησιμοποιήσετε το pubrevision παράμετρος του <ivy:publish>έργου. Αυτό δεν ενημερώνει το ivy.xml, αλλά θα δημοσιεύσει βάζα / πολέμους σας στο σωστό αναθεώρηση. Προτιμώ να χρησιμοποιώ το pubrevision παράμετρος του <ivy:deliver>έργου και αφήστε το να δημιουργήσει το σωστό ivy.xmlαρχείο έτσι κι αλλιώς. Στη συνέχεια, <ivy:publish>θα χρησιμοποιήσει την αναθεώρηση μου ivy.xmlαρχείο.

Δεν χρειάζεται να κάνετε <ivy:retrieve>. Μετά από όλα, τρέχετε μια συγκέντρωση για τη δημιουργία νέων βάζα, και θα πρέπει να είναι κάπου στην κατασκευή σας. Διαφορετικά, αν δεν είστε δημιουργώντας ένα βάζο ή πόλεμο τι προσπαθείτε να δημοσιεύσετε στο Ivy αποθετήριο σας; Και, σίγουρα δεν θέλετε να ανακτήσετε κάτι που ήδη Ivy αποθήκη σας, απλά για να το αναδημοσιεύσετε.


Η φιλοσοφία μου ήταν πάντα ότι η δημοσίευση είναι ένα έργο CM και δεν πρέπει να γίνει στο πλαίσιο της διαδικασίας κατασκευής. Έτσι, δεν χρησιμοποιούμε <ivy:deliver>ή <ivy:publish>.

Χρησιμοποιούμε Artifactory ως Ivy αποθήκη μας (και το αποθετήριο Maven μας). Χρησιμοποιούμε Jenkins ως συνεχής διακομιστής κατασκευής μας.

Αυτό που κάνω είναι να έχουν οι προγραμματιστές κάνουν ένα pom.xmlαρχείο από τους ivy.xmlαρχείων μέσω του <ivy:makepom>έργου. Αυτό και τα βάζα κατασκευής / Οι πόλεμοι αποθηκεύονται ως αρχειοθετημένα αντικείμενα στο Jenkins.

Όταν είμαστε ευχαριστημένοι με μια συγκεκριμένη κατασκευή και θέλουν να σε δημόσιους αποθήκη μας, μπορώ να χρησιμοποιήσω Jenkin για την προώθηση έργο κατασκευής για την προώθηση ενός συγκεκριμένου βάζο / πόλεμο με pom.xml του στην αποθήκη Artifactory μας. Χρησιμοποιούμε το mvn deploy:deploy-fileκαθήκον να το κάνουμε αυτό.

Απαντήθηκε 28/08/2012 στις 19:07
πηγή χρήστη

ψήφοι
0

Είναι σημαντικό να συνειδητοποιήσουμε τι κισσός κάνει εδώ. Δεν είναι απλά αντιγράφοντας βάζα τεχνούργημα σας στο αποθετήριο κισσός - προκαλεί επίσης τις σχετικές «.ivy.xml» τα αρχεία που καθορίζουν όλα τα εξαρτώμενα από καθένα από τα αντικείμενα σας.

Κάτω από τα σκεπάσματα, το ivy:retrieveέργο είναι στην πραγματικότητα επίσης ενεργοποιεί μια ivy:resolve. Όταν αυτό κισσός: εμφανίζεται αποφασιστικότητα, ένα αρχείο είναι γραμμένο στην τοπική μνήμη cache κισσός σας (στο .ivyφάκελο user.home) που καθορίζει τον τρόπο η ανάλυση έγινε (. Η οποία αναθεωρήσεις των οποίων ενότητες απαιτήθηκαν για την ολοκλήρωση της ανάλυσης) όταν ivy:publishσυναντάται, ότι το ρεκόρ ψήφισμα ανακτώνται από την προσωρινή μνήμη και χρησιμοποιείται για τη δημιουργία του ivy.xml για αντικείμενα σας.

Η μεγαλύτερη παγίδα που έχω βρεθεί με τον τρόπο αυτό είναι η απαίτηση που η ivy:resolveκαι ivy:publishτα καθήκοντα και να φορτωθεί από το ίδιο ClassLoader όταν εκτελούνται από μυρμήγκι. Ο ευκολότερος τρόπος για να βεβαιωθείτε ότι θα συμβεί αυτό είναι να χρησιμοποιήσετε το loaderRef για taskdef εργασίες σας. Για παράδειγμα (σημειώστε τις ετικέτες που ταιριάζουν loaderRef):

<taskdef name="ivy-retrieve" 
     classname="org.apache.ivy.ant.IvyRetrieve" 
     classpathref="ivy.lib" 
     loaderRef="ivy.loader"/>
<taskdef name="ivy-publish" 
     classname="org.apache.ivy.ant.IvyPublish" 
     classpathref="ivy.lib" 
     loaderRef="ivy.loader"/>
Απαντήθηκε 10/12/2008 στις 07:10
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more