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.

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.

If such examples did not need external dependencies, then the NET
approach would work.

> 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