Glad to hear it's working now. Yes, afterCreate() is called for every item (file or folder), and copy itself also triggers the callback, so filtering the event based on the repoPath, as you did, is the way to go. There's an open issue <https://issues.jfrog.org/jira/browse/RTFACT-4376>, btw, for an additional indication for whether an event was triggered as a side effect of a copy/move action. One minor thing - instead of item.repoPath.id.contains('stage-release') you can simplify to: item.repoPath.repoKey == 'stage-release'
Yoav On Mon, Apr 16, 2012 at 6:28 AM, Rajwinder Makkar <[email protected]>wrote: > ok so finally i am able to make it work ;-) but i made changes as per my > assumption in previous mails so need confirmation if that is how it works : > > New code is below , I have replaces search with repositories.exists as per > recommendation : > I have tested it and works fine .. but let me know > > =========================================================================== > > > import org.artifactory.exception.CancelException > import org.artifactory.repo.RepoPathFactory > import org.artifactory.util.StringInputStream > > storage { > > afterCreate { item -> > def SourcePath = RepoPathFactory.create('stage-release', > item.repoPath.path) > > def DestPath = RepoPathFactory.create('release', item.repoPath.path) > if (item.repoPath.id.contains('stage-release')) { > echo " ID is " + item.repoPath.id > if (repositories.exists(DestPath)) > > { > echo "FOUND the artifact in the release repo so no need to > copy" > } else { > echo "MISSING artifact in the release repo so copying it over" > repositories.copy (SourcePath, DestPath) > } > } > > } > > > } > > > def echo(str) { > log.warn "########################### " + str; > } > > =========================================================================== > > -Raj > > > On Sun, Apr 15, 2012 at 4:21 PM, Rajwinder Makkar <[email protected] > > wrote: > >> I did another test and looks like that is what the case is .. on >> uploading one jar file , "afterCreate" event get triggered quite a number >> of times : >> >> 2012-04-15 16:13:31,662 [pool-1-thread-25] [WARN ] (no-overwrite :26) - >> ########################### I AM IN THE LOOP >> 2012-04-15 16:13:31,664 [pool-1-thread-25] [WARN ] (no-overwrite :26) - >> ########################### MISSING artifact in the release repo so copying >> it over >> 2012-04-15 16:13:31,667 [pool-1-thread-25] [WARN ] (no-overwrite :26) - >> ########################### I AM IN THE LOOP >> 2012-04-15 16:13:31,669 [pool-1-thread-25] [WARN ] (no-overwrite :26) - >> ########################### MISSING artifact in the release repo so copying >> it over >> 2012-04-15 16:13:31,671 [pool-1-thread-25] [WARN ] (no-overwrite :26) - >> ########################### I AM IN THE LOOP >> 2012-04-15 16:13:31,672 [pool-1-thread-25] [WARN ] (no-overwrite :26) - >> ########################### MISSING artifact in the release repo so copying >> it over >> 2012-04-15 16:13:31,745 [pool-1-thread-25] [WARN ] (no-overwrite :26) - >> ########################### I AM IN THE LOOP >> 2012-04-15 16:13:31,747 [pool-1-thread-25] [WARN ] (no-overwrite :26) - >> ########################### MISSING artifact in the release repo so copying >> it over >> 2012-04-15 16:13:31,751 [pool-1-thread-25] [WARN ] (no-overwrite :26) - >> ########################### I AM IN THE LOOP >> 2012-04-15 16:13:31,752 [pool-1-thread-25] [WARN ] (no-overwrite :26) - >> ########################### MISSING artifact in the release repo so copying >> it over >> 2012-04-15 16:13:31,768 [pool-1-thread-25] [WARN ] (no-overwrite :26) - >> ########################### I AM IN THE LOOP >> 2012-04-15 16:13:31,769 [pool-1-thread-25] [WARN ] (no-overwrite :26) - >> ########################### MISSING artifact in the release repo so copying >> it over >> 2012-04-15 16:13:31,773 [pool-1-thread-25] [WARN ] (no-overwrite :26) - >> ########################### I AM IN THE LOOP >> 2012-04-15 16:13:31,774 [pool-1-thread-25] [WARN ] (no-overwrite :26) - >> ########################### MISSING artifact in the release repo so copying >> it over >> 2012-04-15 16:13:31,777 [pool-1-thread-25] [WARN ] (no-overwrite :26) - >> ########################### I AM IN THE LOOP >> 2012-04-15 16:13:31,779 [pool-1-thread-25] [WARN ] (no-overwrite :26) - >> ########################### MISSING artifact in the release repo so copying >> it over >> 2012-04-15 16:13:31,848 [pool-1-thread-25] [WARN ] (no-overwrite :26) - >> ########################### I AM IN THE LOOP >> 2012-04-15 16:13:31,850 [pool-1-thread-25] [WARN ] (no-overwrite :26) - >> ########################### MISSING artifact in the release repo so copying >> it over >> >> So does that mean we need to put some other condition or use some other >> event ? >> >> -Raj >> >> >> On Sat, Apr 14, 2012 at 6:28 PM, Rajwinder Makkar < >> [email protected]> wrote: >> >>> Thanks Yoav, >>> >>> I will try to use the method as suggested. >>> >>> Here is an example of if the artifact never existed in "stage-release" >>> repo >>> http://weavetoconnect.com/first_time.png >>> >>> Here is an example of if the artifact existed and overwritten in >>> "stage-release" repo >>> http://weavetoconnect.com/over-write.png >>> >>> I think i got one clue on what is happening here . Issue is that this >>> code get triggered every time an artifact is created in a repo and looks >>> like artifactory considers "even creating an group id" or "version number" >>> as creation of new artifact. and hence get triggered on all these events >>> and hence the code mess up the structure. >>> >>> For ex if i need to upload axis-1.4.jar which has group id "axis" and >>> artifact id as "axis" and version number as 1.4 , then my assumption was >>> that artifactory considers "creation of axis-1.4.jar" as create event but >>> in actual it considers even creating "axis" folder , 1.4 folder as an >>> artifact and hence the above structure is formed. >>> >>> But this is just my theory .. i think i need to use an event which get >>> triggered when jar is created ? >>> >>> Please let me know >>> >>> -Raj >>> >>> >>> >>> >>> On Sat, Apr 14, 2012 at 2:09 PM, Yoav Landman <[email protected]> wrote: >>> >>>> Can you elaborate on why the copied artifact is not what you'd expect? >>>> Also, if you know the expected path of the artifact in the target >>>> repository, it is much preferable to check for its existence directly with >>>> Repositories.exists() than to run a search query each time. >>>> >>>> >>>> On Sat, Apr 14, 2012 at 2:30 AM, Rajwinder Makkar < >>>> [email protected]> wrote: >>>> >>>>> Ok so i have finally written the code by refering to various examples >>>>> on the artifactory site : >>>>> >>>>> Here is what the code is intended to do : >>>>> >>>>> 1. When a artifact is uploaded it get triggered on "afterCreate" event. >>>>> 2. It will query the release repo to see if the artifact version exist. >>>>> 3. If it exist then will not do any thing. >>>>> 4. If it does not exist then it will copy it to the release repo from >>>>> this stage repo. >>>>> >>>>> Now given i am niether a groovy or java coder this is a very basic >>>>> code. >>>>> >>>>> Issue now is that when it copies the artifact it actually paste it in >>>>> target repo in a pretty wiered form. I am sure i am missing some thing but >>>>> i thought at this point it will be better to ask the experts ;-( >>>>> >>>>> -Raj >>>>> >>>>> ============================================ >>>>> import org.artifactory.exception.CancelException >>>>> import org.artifactory.repo.RepoPathFactory >>>>> import org.artifactory.util.StringInputStream >>>>> >>>>> storage { >>>>> >>>>> afterCreate { item -> >>>>> def repoPaths = searches.artifactsByName(item.repoPath.name >>>>> ,"release") >>>>> def SourcePath = RepoPathFactory.create('ext-release-local', >>>>> item.repoPath.path) >>>>> def DestPath = RepoPathFactory.create('release', >>>>> item.repoPath.path) >>>>> if (repoPaths.size >= 1) >>>>> { >>>>> echo "FOUND the artifact in the release repo so no need to copy" >>>>> } else { >>>>> echo "MISSING artifact in the release repo so copying it over" >>>>> repositories.copy (SourcePath, DestPath) >>>>> } >>>>> } >>>>> >>>>> >>>>> } >>>>> >>>>> >>>>> def echo(str) { >>>>> log.warn "########################### " + str; >>>>> } >>>>> >>>>> >>>>> ============================================ >>>>> >>>>> >>>>> On Thu, Apr 12, 2012 at 9:30 AM, Rajwinder Makkar < >>>>> [email protected]> wrote: >>>>> >>>>>> Hmm i m not sure if this will work as before every build i do clean >>>>>> so every time it creates new file and it will have new chksum , so >>>>>> basically even if property tag eill not change, file will have new >>>>>> chksum >>>>>> even when code is not changed.. >>>>>> >>>>>> Or am i missing something >>>>>> >>>>>> Raj >>>>>> On Apr 12, 2012 4:28 AM, "Yoav Landman" <[email protected]> wrote: >>>>>> >>>>>>> The pom.properties file contains a timestamp comment that changes >>>>>>> with every build and so pollutes the artifact's checksum signature. >>>>>>> When this is the only difference, so you are virtually creating the >>>>>>> exact same binary, then it makes sense to save time and space by not >>>>>>> redeploying the same content. >>>>>>> >>>>>>> On Wed, Apr 11, 2012 at 10:45 PM, Rajwinder Makkar < >>>>>>> [email protected]> wrote: >>>>>>> >>>>>>>> Thanks .. I think archive configuration will only prevent >>>>>>>> generation of .properties and .pom file .. i doubt it will impact >>>>>>>> checksum. >>>>>>>> And any how we want checksum to be changed if it's a new file and it >>>>>>>> make >>>>>>>> sense , only i was confused on how checksum is used when it comes to >>>>>>>> artifactory. >>>>>>>> >>>>>>>> -Raj >>>>>>>> >>>>>>>> On Tue, Apr 10, 2012 at 12:43 AM, Yoav Landman <[email protected]>wrote: >>>>>>>> >>>>>>>>> You should be able to get around this behavior and end up with the >>>>>>>>> same checksum: >>>>>>>>> >>>>>>>>> http://maven.apache.org/guides/mini/guide-archive-configuration.html >>>>>>>>> >>>>>>>>> >>>>>>>>> On Mon, Apr 9, 2012 at 1:18 PM, Noam Y. Tenne <[email protected]>wrote: >>>>>>>>> >>>>>>>>>> It's true that Maven modifies the produced artifact on every >>>>>>>>>> reactor build, even when the code itself was not modified; but that >>>>>>>>>> is the >>>>>>>>>> behavior of Maven. >>>>>>>>>> Although Artifactory has many features that are "tailor-made" to >>>>>>>>>> suit specific build tools, it actually serves as a general purpose >>>>>>>>>> binary >>>>>>>>>> repository manager and any file can be stored no matter how it was >>>>>>>>>> produced. >>>>>>>>>> So this feature can save a lot of time and bandwidth when >>>>>>>>>> deploying from an environment which doesn't modify the checksum of >>>>>>>>>> the >>>>>>>>>> artifact willy nilly, or if deploying a copy of an artifact that is >>>>>>>>>> already >>>>>>>>>> stored within Artifactory. >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> On Sun, Apr 8, 2012 at 8:31 PM, Rajwinder Makkar < >>>>>>>>>> [email protected]> wrote: >>>>>>>>>> >>>>>>>>>>> I am little confused with this API : >>>>>>>>>>> >>>>>>>>>>> As per documentation : >>>>>>>>>>> >>>>>>>>>>> ++++++++++++++++++++++++++++++++++++++++++++++++++++++ >>>>>>>>>>> Deploy Artifact by Checksum >>>>>>>>>>> >>>>>>>>>>> Description: Deploy an artifact to the specified destination by >>>>>>>>>>> checking if the artifact content already exists in Artifactory. >>>>>>>>>>> If Artifactory already contains a readable artifact with the >>>>>>>>>>> same checksum the artifact content will be copied over to the new >>>>>>>>>>> location >>>>>>>>>>> and return a response without requiring a content transfer. >>>>>>>>>>> >>>>>>>>>>> ++++++++++++++++++++++++++++++++++++++++++++++++++++++ >>>>>>>>>>> >>>>>>>>>>> As with any maven build i do mvn clean deploy. This means that >>>>>>>>>>> the artifact will always be having a new md5 checksum no matter >>>>>>>>>>> even if the >>>>>>>>>>> code is same. Then how come it can ever match the checksum of >>>>>>>>>>> artifact in >>>>>>>>>>> artifactory ? For artifactory every time it will be a new artifact >>>>>>>>>>> as the >>>>>>>>>>> checksum will be different. >>>>>>>>>>> >>>>>>>>>>> So what is the purpose of "deploy artifact by checksum" >>>>>>>>>>> >>>>>>>>>>> -Raj >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> On Sun, Apr 8, 2012 at 7:34 AM, Noam Y. Tenne >>>>>>>>>>> <[email protected]>wrote: >>>>>>>>>>> >>>>>>>>>>>> A basic guide can be found in the wiki page I linked to ( >>>>>>>>>>>> http://wiki.jfrog.org/confluence/display/RTF/User+Plugins), >>>>>>>>>>>> but don't hesitate to contact us for any more info. >>>>>>>>>>>> BTW, the user plugins are only available as an addon (part of >>>>>>>>>>>> Artifactory's Pro version), but you can download a free eval from >>>>>>>>>>>> here<https://secure.artifactoryonline.com/registration/evaluateaddons.html> >>>>>>>>>>>> . >>>>>>>>>>>> >>>>>>>>>>>> Cheers, >>>>>>>>>>>> Noam >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> On Sun, Apr 8, 2012 at 5:24 PM, Rajwinder Makkar < >>>>>>>>>>>> [email protected]> wrote: >>>>>>>>>>>> >>>>>>>>>>>>> Hmm .. this is smart approach Noam .. let me give it a try .. >>>>>>>>>>>>> I assume it needs to be written in groovy .. but can u point me >>>>>>>>>>>>> to the link >>>>>>>>>>>>> for documentation regarding this like how to create aftercreate >>>>>>>>>>>>> hook ? >>>>>>>>>>>>> >>>>>>>>>>>>> Thanks much >>>>>>>>>>>>> Raj >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> On Sun, Apr 8, 2012 at 4:44 AM, Noam Y. Tenne <[email protected] >>>>>>>>>>>>> > wrote: >>>>>>>>>>>>> >>>>>>>>>>>>>> Actually, this can be achieved by utilizing our user >>>>>>>>>>>>>> plugins<http://wiki.jfrog.org/confluence/display/RTF/User+Plugins> >>>>>>>>>>>>>> : >>>>>>>>>>>>>> >>>>>>>>>>>>>> 1. Create a temporary repository for deployments apart >>>>>>>>>>>>>> from you original target repository and direct all your >>>>>>>>>>>>>> deployments to that >>>>>>>>>>>>>> temp repo. >>>>>>>>>>>>>> 2. Revoke delete permissions from the original target >>>>>>>>>>>>>> repository and provide delete permissions to the temp repo. >>>>>>>>>>>>>> 3. Write a user plugin with the "afterCreate" hook that >>>>>>>>>>>>>> checks each deployment performed on the temp repo; if the >>>>>>>>>>>>>> artifact doesn't >>>>>>>>>>>>>> already exist in the "real" target repository, copy it to >>>>>>>>>>>>>> there; if the >>>>>>>>>>>>>> artifact already exists, do nothing with it. >>>>>>>>>>>>>> >>>>>>>>>>>>>> HTH, >>>>>>>>>>>>>> Noam >>>>>>>>>>>>>> >>>>>>>>>>>>>> On Sun, Apr 8, 2012 at 12:24 PM, Noam Y. Tenne < >>>>>>>>>>>>>> [email protected]> wrote: >>>>>>>>>>>>>> >>>>>>>>>>>>>>> Hi Raj, >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Currently, there's no way to achieve this; but you may open >>>>>>>>>>>>>>> a feature request in our JIRA <https://issues.jfrog.org> if >>>>>>>>>>>>>>> you feel this feature is needed. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Cheers, >>>>>>>>>>>>>>> Noam >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> On Sun, Apr 8, 2012 at 9:32 AM, Rajwinder Makkar < >>>>>>>>>>>>>>> [email protected]> wrote: >>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Is there any way in artifactory to configure this : >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> If an artifact that is sent for deployment to a repo has >>>>>>>>>>>>>>>> existing version in the same repo then ignore that artifact. >>>>>>>>>>>>>>>> Ignore means >>>>>>>>>>>>>>>> dont overwrite and dont fail the build either. >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Or basically if i remove delete permission then it should >>>>>>>>>>>>>>>> not send failure to maven build. >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> -Raj >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> ------------------------------------------------------------------------------ >>>>>>>>>>>>>>>> For Developers, A Lot Can Happen In A Second. >>>>>>>>>>>>>>>> Boundary is the first to Know...and Tell You. >>>>>>>>>>>>>>>> Monitor Your Applications in Ultra-Fine Resolution. Try it >>>>>>>>>>>>>>>> FREE! >>>>>>>>>>>>>>>> http://p.sf.net/sfu/Boundary-d2dvs2 >>>>>>>>>>>>>>>> _______________________________________________ >>>>>>>>>>>>>>>> Artifactory-users mailing list >>>>>>>>>>>>>>>> [email protected] >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/artifactory-users >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> ------------------------------------------------------------------------------ >>>>>>>>>>>>>> For Developers, A Lot Can Happen In A Second. >>>>>>>>>>>>>> Boundary is the first to Know...and Tell You. >>>>>>>>>>>>>> Monitor Your Applications in Ultra-Fine Resolution. Try it >>>>>>>>>>>>>> FREE! >>>>>>>>>>>>>> http://p.sf.net/sfu/Boundary-d2dvs2 >>>>>>>>>>>>>> _______________________________________________ >>>>>>>>>>>>>> Artifactory-users mailing list >>>>>>>>>>>>>> [email protected] >>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/artifactory-users >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> ------------------------------------------------------------------------------ >>>>>>>>>>>>> For Developers, A Lot Can Happen In A Second. >>>>>>>>>>>>> Boundary is the first to Know...and Tell You. >>>>>>>>>>>>> Monitor Your Applications in Ultra-Fine Resolution. Try it >>>>>>>>>>>>> FREE! >>>>>>>>>>>>> http://p.sf.net/sfu/Boundary-d2dvs2 >>>>>>>>>>>>> _______________________________________________ >>>>>>>>>>>>> Artifactory-users mailing list >>>>>>>>>>>>> [email protected] >>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/artifactory-users >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> ------------------------------------------------------------------------------ >>>>>>>>>>>> For Developers, A Lot Can Happen In A Second. >>>>>>>>>>>> Boundary is the first to Know...and Tell You. >>>>>>>>>>>> Monitor Your Applications in Ultra-Fine Resolution. Try it FREE! >>>>>>>>>>>> http://p.sf.net/sfu/Boundary-d2dvs2 >>>>>>>>>>>> _______________________________________________ >>>>>>>>>>>> Artifactory-users mailing list >>>>>>>>>>>> [email protected] >>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/artifactory-users >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> ------------------------------------------------------------------------------ >>>>>>>>>>> For Developers, A Lot Can Happen In A Second. >>>>>>>>>>> Boundary is the first to Know...and Tell You. >>>>>>>>>>> Monitor Your Applications in Ultra-Fine Resolution. Try it FREE! >>>>>>>>>>> http://p.sf.net/sfu/Boundary-d2dvs2 >>>>>>>>>>> _______________________________________________ >>>>>>>>>>> Artifactory-users mailing list >>>>>>>>>>> [email protected] >>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/artifactory-users >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> ------------------------------------------------------------------------------ >>>>>>>>>> For Developers, A Lot Can Happen In A Second. >>>>>>>>>> Boundary is the first to Know...and Tell You. >>>>>>>>>> Monitor Your Applications in Ultra-Fine Resolution. Try it FREE! >>>>>>>>>> http://p.sf.net/sfu/Boundary-d2dvs2 >>>>>>>>>> >>>>>>>>>> _______________________________________________ >>>>>>>>>> Artifactory-users mailing list >>>>>>>>>> [email protected] >>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/artifactory-users >>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> ------------------------------------------------------------------------------ >>>>>>>>> Better than sec? Nothing is better than sec when it comes to >>>>>>>>> monitoring Big Data applications. Try Boundary one-second >>>>>>>>> resolution app monitoring today. Free. >>>>>>>>> http://p.sf.net/sfu/Boundary-dev2dev >>>>>>>>> >>>>>>>>> _______________________________________________ >>>>>>>>> Artifactory-users mailing list >>>>>>>>> [email protected] >>>>>>>>> https://lists.sourceforge.net/lists/listinfo/artifactory-users >>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> ------------------------------------------------------------------------------ >>>>>>>> Better than sec? Nothing is better than sec when it comes to >>>>>>>> monitoring Big Data applications. Try Boundary one-second >>>>>>>> resolution app monitoring today. Free. >>>>>>>> http://p.sf.net/sfu/Boundary-dev2dev >>>>>>>> _______________________________________________ >>>>>>>> Artifactory-users mailing list >>>>>>>> [email protected] >>>>>>>> https://lists.sourceforge.net/lists/listinfo/artifactory-users >>>>>>>> >>>>>>>> >>>>>>> >>>>>>> >>>>>>> ------------------------------------------------------------------------------ >>>>>>> For Developers, A Lot Can Happen In A Second. >>>>>>> Boundary is the first to Know...and Tell You. >>>>>>> Monitor Your Applications in Ultra-Fine Resolution. Try it FREE! >>>>>>> http://p.sf.net/sfu/Boundary-d2dvs2 >>>>>>> _______________________________________________ >>>>>>> Artifactory-users mailing list >>>>>>> [email protected] >>>>>>> https://lists.sourceforge.net/lists/listinfo/artifactory-users >>>>>>> >>>>>>> >>>>> >>>>> >>>>> ------------------------------------------------------------------------------ >>>>> For Developers, A Lot Can Happen In A Second. >>>>> Boundary is the first to Know...and Tell You. >>>>> Monitor Your Applications in Ultra-Fine Resolution. Try it FREE! >>>>> http://p.sf.net/sfu/Boundary-d2dvs2 >>>>> _______________________________________________ >>>>> Artifactory-users mailing list >>>>> [email protected] >>>>> https://lists.sourceforge.net/lists/listinfo/artifactory-users >>>>> >>>>> >>>> >>>> >>>> ------------------------------------------------------------------------------ >>>> For Developers, A Lot Can Happen In A Second. >>>> Boundary is the first to Know...and Tell You. >>>> Monitor Your Applications in Ultra-Fine Resolution. Try it FREE! >>>> http://p.sf.net/sfu/Boundary-d2dvs2 >>>> _______________________________________________ >>>> Artifactory-users mailing list >>>> [email protected] >>>> https://lists.sourceforge.net/lists/listinfo/artifactory-users >>>> >>>> >>> >> > > > ------------------------------------------------------------------------------ > For Developers, A Lot Can Happen In A Second. > Boundary is the first to Know...and Tell You. > Monitor Your Applications in Ultra-Fine Resolution. Try it FREE! > http://p.sf.net/sfu/Boundary-d2dvs2 > > _______________________________________________ > Artifactory-users mailing list > [email protected] > https://lists.sourceforge.net/lists/listinfo/artifactory-users > >
------------------------------------------------------------------------------ For Developers, A Lot Can Happen In A Second. Boundary is the first to Know...and Tell You. Monitor Your Applications in Ultra-Fine Resolution. Try it FREE! http://p.sf.net/sfu/Boundary-d2dvs2
_______________________________________________ Artifactory-users mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/artifactory-users
