[wildfly-dev] Srcdeps in WildFly and WildFly Core

Peter Palaga ppalaga at redhat.com
Wed Jan 25 16:45:44 EST 2017


Hi *,

this is not new to those of you who attended my talk on the F2F 2016 in 
Brno. Let me explain the idea here again for all others who did not have 
a chance to be there.

Srcdeps [1] is a tool to build Maven dependencies from their sources. 
With srcdeps, wildfly-core can depend on a specific commit of, e.g., 
undertow:

<version.io.undertow>1.4.8.Final-SRC-revision-aabbccd</version.io.undertow>

where aabbccd is the git commit id to build when any undertow artifact 
is requested during the build of wildfly-core.

[1] describes in detail, how it works.

The main advantage of srcdeps is that changes in components can be 
integrated and tested in wildfly-core immediately after they are 
committed to a public component branch. There is no need to wait for the 
component release.

Here in the WildFly family of projects, it is often the case that 
something needs to be fixed in a component, but the verification (using 
bug reproducer, or integration test) is possible only at the level of 
wildfly or wildfly-core. Engineers typically work with snapshots 
locally, but when their changes need to get shared (CI, reviews) in a 
reproducible manner, snapshots cannot be used anymore.
In such situations a source dependency come in handy: it is very easy to 
share and it is as reproducible as a Maven build from a specific commit 
can be. All CIs and reviewers can work with it, because all source 
dependency compilation is done under the hood by Maven.

Developers working on changes that span over multiple interdependent git 
repos can thus get feedback (i-tests, reviews) quickly without waiting 
for releases of components.

Srcdeps emerged in the Hawkular family of projects to solve exactly this 
kind of situation and is in use there since around October 2015.

When I said there is no need to wait for releases of components, I did 
not mean that we can get rid of component releases altogether. Clearly, 
we cannot, because i.a. for any tooling uninformed about how srcdeps 
work, those source dependencies would simply be non-resolvable from 
public Maven repositories. So, before releasing the dependent component 
(such as wildfly-core) all its dependencies need to be released. To 
enforce this, srcdeps is by default configured to make the release fail, 
as long as there are source dependencies.

I have sent a PR introducing srcdeps to wildfly-core: 
https://github.com/wildfly/wildfly-core/pull/2122
To get a feeling how it works, checkout the branch, switch to e.g. 
<version.io.undertow>1.4.8.Final-SRC-revision-1bff8c32f0eee986e83a7589ae95ebbc1d67d6bd</version.io.undertow> 
(that happens to be the commit id of the 1.4.8.Final tag)
and build wildfly-core as usual with "mvn clean install". You'll see in 
the build log that undertow is being cloned to ~/.m2/srcdeps/io/undertow 
and that it is built there. After the build, check that the 
1.4.8.Final-SRC-revision-1bff8c32f0eee986e83a7589ae95ebbc1d67d6bd 
version of Undertow got installed to your local Maven repo (usually 
~/m2/repository/io/undertow/undertow-core )

Are there any questions or comments?

[1] https://github.com/srcdeps/srcdeps-maven#srcdeps-maven

Thanks,

Peter

P.S.: I will be talking about srcdeps on Saturday 2017-01-28 at 14:30 at 
DevConf Brno.


More information about the wildfly-dev mailing list