On 8 January 2015 at 11:59, Gilles <gil...@harfang.homelinux.org> wrote:
> On Thu, 8 Jan 2015 01:20:20 +0000, sebb wrote:
>>
>> On 8 January 2015 at 00:25, Gilles <gil...@harfang.homelinux.org> wrote:
>>>
>>> On Wed, 7 Jan 2015 17:21:33 +0000, sebb wrote:
>>>>
>>>>
>>>> On 7 January 2015 at 17:12, Thomas Neidhart
>>>> <thomas.neidh...@gmail.com> wrote:
>>>>>
>>>>>
>>>>> On 01/07/2015 06:00 PM, sebb wrote:
>>>>>>
>>>>>>
>>>>>> On 7 January 2015 at 16:29, Thomas Neidhart
>>>>>> <thomas.neidh...@gmail.com>
>>>>>> wrote:
>>>>>>>
>>>>>>>
>>>>>>> On 01/07/2015 04:50 PM, sebb wrote:
>>>>>>>>
>>>>>>>>
>>>>>>>> On 7 January 2015 at 13:59, Gilles <gil...@harfang.homelinux.org>
>>>>>>>> wrote:
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> [...]
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> I have pushed the change to the userguide. To execute the example
>>>>>>>>>> you do
>>>>>>>>>> the following:
>>>>>>>>>>
>>>>>>>>>>  * go to commons-math folder, type mvn clean install
>>>>>>>>>>    this step is only needed if your local maven repository does
>>>>>>>>>> not
>>>>>>>>>> yet
>>>>>>>>>>    contain the latest commons-math snapshot
>>>>>>>>>>  * go to userguide folder (src/userguide), type mvn clean package
>>>>>>>>>>  * now you can run the examples like that:
>>>>>>>>>>
>>>>>>>>>> java -cp target/commons-math3-examples-uber-3.5-SNAPSHOT.jar
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> org.apache.commons.math3.userguide.LowDiscrepancyGeneratorComparison
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Very nice.
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> Yes, however there is a caveat.
>>>>>>>> The uber jar must not be published, at least in its current form.
>>>>>>>> - it contains un-shaded classes that have different Maven coords (=>
>>>>>>>> jar hell)
>>>>>>>> - it does not have N&L files
>>>>>>>> - are the 3rd party jars AL compatible?
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> there is no intention to publish the uber jar.
>>>>>>
>>>>>>
>>>>>>
>>>>>> OK.
>>>>>>
>>>>>>>> There is another way to run the code without needing to generate the
>>>>>>>> jars:
>>>>>>>>
>>>>>>>> cd src/userguide
>>>>>>>>
>>>>>>>> mvn -q exec:java
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> -Dexec.mainClass=org.apache.commons.math3.userguide.LowDiscrepancyGeneratorComparison
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> nice, did not know this trick before.
>>>>>>>
>>>>>>>> This uses Maven to resolve the dependencies.
>>>>>>>>
>>>>>>>> Works very well for developer testing of examples.
>>>>>>>> However it is not so useful for end users as they would need Maven
>>>>>>>> and
>>>>>>>> the Math source.
>>>>>>>>
>>>>>>>> The NET jar method works well because there are no external
>>>>>>>> dependencies, and the example jar is created in the same directory
>>>>>>>> as
>>>>>>>> the core jar it depends on.
>>>>>>>>
>>>>>>>> The same approach would work for Math, but the user would have to
>>>>>>>> download the additional dependencies somehow.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> the approach with exec:java is good enough imho, as >90% of the users
>>>>>>> will have maven installed.
>>>
>>>
>>>
>>> Agreed.
>>> It's safe to assume that (see below for the proposed usage).
>>>
>>>>>>
>>>>>> But they won't necessarily have the Math source.
>>>>>>
>>>>>> On a whim I just tried creating a basic pom with only the
>>>>>> dependencies.
>>>>>> I added examples as another dependency.
>>>>>>
>>>>>> This works fine with exec:java from any directory provided only that
>>>>>> the examples have been installed (or can be found from a repo)
>>>>>>
>>>>>> A minor disadvantage of exec:java is one has to use properties for the
>>>>>> main class and arguments - the syntax is a bit awkward.
>>>
>>>
>>>
>>> I did not follow the details (e.g. what is "uber"?) but IMHO, one simple
>>
>>
>> The uber jar is a jar that contains the examples classes and all its
>> dependencies.
>>
>>> enough way is enough; the simpler the "pom.xml" the better (perhaps with
>>> a little README in the same directory).
>>
>>
>> The src/userguide/pom.xml compiles the examples and creates the uber jar.
>> The section that creates the uber jar could be dropped and it would
>> still be suitable for use with exec:java
>>
>>>>> the examples are also not published (yet), thus there is no way to run
>>>>> the examples without downloading the source distribution (or checkout
>>>>> the git repo).
>>>>
>>>>
>>>>
>>>> Yes, but the code we are discussing is for the next release.
>>>
>>>
>>>
>>> Not necessarily.
>>> The first step was necessarily to be able to compile and run them
>>> for ourselves.
>>
>>
>> OK
>>
>>>> I think it would make sense to include the compiled examples in the
>>>> release as a separate jar.
>>>
>>>
>>>
>>> IMO, the setup in the "src/userguide" can have at least two purposes
>>> that are more useful than publishing the compiled examples:
>>>  1. Generate reports (on various aspects of CM) to be integrated in
>>>     "userguide" document. [For this, the build must run the code
>>>     that generates the reports.]
>>>  2. Publish source code of working examples. [For this, the RM
>>>     must of course ensure that the code is correct (i.e. compiles
>>>     and runs as expected).]
>>>
>>> Providing compiled code is only useful if the examples are more
>>> than just toy problems, and provide readily useful functionalities:
>>> a library of real-world applications (in which the name "examples"
>>> won't be appropriate anymore).  [We are not there yet (the idea of
>>> real-world examples was proposed quite some time ago but did not
>>> elicit any comment IIRC).]
>>
>>
>> By contrast the NET examples are all (or mostly) usable.
>>
>>> Points (1) and (2) would add to the resources which a newcomer
>>> might like to read to get acquainted with the contents of the
>>> library. The document should be readily available without a
>>> prospective user having to run anything.
>>>
>>
>> Well of course.
>
>
> So we need to set up a list of desirable reports...
> [One that comes to mind is a benchmark of FastMath.]
>
>> If the examples were extended to include useful utilities, then I
>> suspect you would find some people wanted to be able to run them
>> without needing to install Maven and a JDK.
>> In which case one way to do this is via a uber jar.
>> That would only require a Java runtime.
>
>
> I understand, but since there are no such utilities, better avoid
> potential license problems. I.e. let's first decide which examples
> are broadly, then publish only those when the time comes, and this
> in turn will require more fine-grained control of the build.
> So IMHO, it's better to remove the "uber" setup (if just so that
> we limit the things that might break, or that the thing that might
> break will be discovered sooner since we'd all use the same tool).
>
>>
>> If such examples did not need external dependencies, then the NET
>> approach would work.
>
>
> And, as suggested above, perhaps that the published compiled
> examples won't have the problematic dependencies...

There's another way round the uber jar. Requires Maven and Java
runtime but not JDK.

That is to provide the dependency POM I mentioned earlier.

It will download the dependencies to the local Maven repo if necessary.

I'll add a sample to JIRA so people can try it.


>
>
> Gilles
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
> For additional commands, e-mail: dev-h...@commons.apache.org
>

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
For additional commands, e-mail: dev-h...@commons.apache.org

Reply via email to