unofficial mirror of guix-devel@gnu.org 
 help / color / mirror / code / Atom feed
* State of maven build system, gradle and Apache commens
@ 2016-09-01 11:36 Hartmut Goebel
  2016-09-01 12:03 ` Ricardo Wurmus
  0 siblings, 1 reply; 13+ messages in thread
From: Hartmut Goebel @ 2016-09-01 11:36 UTC (permalink / raw)
  To: guix-devel


[-- Attachment #1.1: Type: text/plain, Size: 543 bytes --]

Hi,

is anyone working on this? (I'm lacking knowledge to help with maven or
gradle, but could help with commons.)

-- 
Schönen Gruß
Hartmut Goebel
Dipl.-Informatiker (univ), CISSP, CSSLP, ISO 27001 Lead Implementer
Information Security Management, Security Governance, Secure Software
Development

Goebel Consult, Landshut
http://www.goebel-consult.de

Blog:
http://www.goebel-consult.de/blog/digitale-burgerrechte-in-der-ara-snowden
Kolumne:
http://www.cissp-gefluester.de/2011-08-horrorszenario-bring-your-own-device


[-- Attachment #1.2: Type: text/html, Size: 1521 bytes --]

[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 2430 bytes --]

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: State of maven build system, gradle and Apache commens
  2016-09-01 11:36 State of maven build system, gradle and Apache commens Hartmut Goebel
@ 2016-09-01 12:03 ` Ricardo Wurmus
  2016-09-01 16:51   ` Hartmut Goebel
  2016-09-05 22:15   ` Björn Höfling
  0 siblings, 2 replies; 13+ messages in thread
From: Ricardo Wurmus @ 2016-09-01 12:03 UTC (permalink / raw)
  To: Hartmut Goebel; +Cc: guix-devel


Hartmut Goebel <h.goebel@goebel-consult.de> writes:

> is anyone working on this? (I'm lacking knowledge to help with maven
> or gradle, but could help with commons.)

We are still a long way off before get to a working maven build system.
I have a few more Java packages sitting here, but it’s not much.

We first need to recursively package all dependencies of Maven.  The
next packages on my list are “java-javax-mail” (done) and “java-log4j-core”,
which needs the following packages:

    javax-persistence
    javax-jms
    java-zeromq
    kafka
    apache-commons

These might have unpackaged dependencies of their own.  If you took over
“apache-commons” that would be very helpful.  You should be able to use
the “ant-build-system” to get started, even if it doesn’t result in the
prettiest packages.

Once we actually have Maven packaged (completely from source without
cheating) we should take a look at the existing packages again and see
if we should install jars with a directory layout that Maven expects.
Until then I wouldn’t bother trying to anticipate all these issues.

~~ Ricardo

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: State of maven build system, gradle and Apache commens
  2016-09-01 12:03 ` Ricardo Wurmus
@ 2016-09-01 16:51   ` Hartmut Goebel
  2016-09-02  7:47     ` Ricardo Wurmus
  2016-09-05 22:15   ` Björn Höfling
  1 sibling, 1 reply; 13+ messages in thread
From: Hartmut Goebel @ 2016-09-01 16:51 UTC (permalink / raw)
  To: guix-devel


[-- Attachment #1.1: Type: text/plain, Size: 1281 bytes --]

Hallo,

>     apache-commons
>
> These might have unpackaged dependencies of their own.  If you took over
> “apache-commons” that would be very helpful.  You should be able to use
> the “ant-build-system” to get started, even if it doesn’t result in the
> prettiest packages.

Curiously maven requires commons-io, and commons-io can officially be
build using maven. That's crude!

I started some work on this. Not sure how far I'll get.

I managed to suppress the download of external sources, but now I got
stuck with

CLASSPATH element /gnu/store/…-icedtea-2.6.7-jdk/bin/jar is not a JAR.

And of course, this is not a jar, but a binary. Also the CLASSPATH
includes *a lot* of stuff, eg,
/gnu/store/…-icedtea-2.6.7-jdk/demo/jfc/Notepad/Notepad.jar which I'd
assume should not be on the standard class-path?

Any ideas?


-- 
Schönen Gruß
Hartmut Goebel
Dipl.-Informatiker (univ), CISSP, CSSLP, ISO 27001 Lead Implementer
Information Security Management, Security Governance, Secure Software
Development

Goebel Consult, Landshut
http://www.goebel-consult.de

Blog:
http://www.goebel-consult.de/blog/kleiner-erfahrungsbericht-mit-online-ocr-diensten

Kolumne: http://www.cissp-gefluester.de/2010-09-mut-zur-beschraenkung


[-- Attachment #1.2: Type: text/html, Size: 2539 bytes --]

[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 2430 bytes --]

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: State of maven build system, gradle and Apache commens
  2016-09-01 16:51   ` Hartmut Goebel
@ 2016-09-02  7:47     ` Ricardo Wurmus
  2016-09-02 10:44       ` Hartmut Goebel
  0 siblings, 1 reply; 13+ messages in thread
From: Ricardo Wurmus @ 2016-09-02  7:47 UTC (permalink / raw)
  To: Hartmut Goebel; +Cc: guix-devel


Hartmut Goebel <h.goebel@goebel-consult.de> writes:

> Hallo,
>
>         apache-commons
>
> These might have unpackaged dependencies of their own.  If you took over
> “apache-commons” that would be very helpful.  You should be able to use
> the “ant-build-system” to get started, even if it doesn’t result in the
> prettiest packages.
>
> Curiously maven requires commons-io, and commons-io can officially be
> build using maven. That's crude!

That’s a common problem, unfortunately (Maven itself needs Maven, for
example).  The “ant-build-system” can generate a simple “build.xml” file
for those packages that don’t have one, so building individual libraries
without Maven is possible (albeit not always convenient enough).

> CLASSPATH element /gnu/store/…-icedtea-2.6.7-jdk/bin/jar is not a JAR.

This should not be on the CLASSPATH.  The “ant-build-system” sets
CLASSPATH to the result of running “generate-classpath” on all inputs.
Currently, all this does it add any and all “.jar” files to the
CLASSPATH.  To keep “jar” itself out, the regular expression should be
changed from

   (find-files dir "\\.*jar$")

to something like

   (find-files dir "\\.jar$")

> And of course, this is not a jar, but a binary. Also the CLASSPATH
> includes *a lot* of stuff, eg,
> /gnu/store/…-icedtea-2.6.7-jdk/demo/jfc/Notepad/Notepad.jar which I'd
> assume should not be on the standard class-path?

This could be removed by augmenting “generate-classpath” in
“guix/build/ant-build-system.scm”.

~~ Ricardo

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: State of maven build system, gradle and Apache commens
  2016-09-02  7:47     ` Ricardo Wurmus
@ 2016-09-02 10:44       ` Hartmut Goebel
  2016-09-02 11:48         ` Ricardo Wurmus
  0 siblings, 1 reply; 13+ messages in thread
From: Hartmut Goebel @ 2016-09-02 10:44 UTC (permalink / raw)
  To: guix-devel


[-- Attachment #1.1.1: Type: text/plain, Size: 1427 bytes --]

Am 02.09.2016 um 09:47 schrieb Ricardo Wurmus:
> This should not be on the CLASSPATH.  The “ant-build-system” sets
> CLASSPATH to the result of running “generate-classpath” on all inputs.
> Currently, all this does it add any and all “.jar” files to the
> CLASSPATH.  To keep “jar” itself out, the regular expression should be
> changed from
>
>    (find-files dir "\\.*jar$")
>
> to something like
>
>    (find-files dir "\\.jar$")

Thanks for this tip, it helped. (Will submit a patch later)

Meantime I managed to build commons-io, commons-cli, commons-lang and
commons-codec.

I found all of these need intervention for building, as there is no
"install" target (maybe I missed something). Echo of the packages
behaves a bit different (e.g. different directory names), while sharing
some common patterns. I'll attach my WIP for your convenience.

I failed building commons-logging, which requires e.g. javax.servelet,
the avalon-frameweork and much more.


-- 
Schönen Gruß
Hartmut Goebel
Dipl.-Informatiker (univ), CISSP, CSSLP, ISO 27001 Lead Implementer
Information Security Management, Security Governance, Secure Software
Development

Goebel Consult, Landshut
http://www.goebel-consult.de

Blog:
http://www.goebel-consult.de/blog/warum-sie-nicht-perl-programmiern-sollten
Kolumne:
http://www.cissp-gefluester.de/2011-08-horrorszenario-bring-your-own-device


[-- Attachment #1.1.2: Type: text/html, Size: 2645 bytes --]

[-- Attachment #1.2: commons-io.txt --]
[-- Type: text/plain, Size: 10863 bytes --]

(use-modules (guix)
             (guix build-system ant)
             (guix licenses)
(gnu packages base)
(gnu packages java))


(define (apache-commons-url projname version)
  ; todo: add option for passing the archive basename (default: projname)
  (let ((basename projname))
    (string-append
     "https://archive.apache.org/dist/commons/" projname "/source/"
     "commons-" basename "-" version "-src.tar.gz")))

; todo: how to use these as a phase, like
;  (replace 'install install-jars)
;  (add-after 'build build-javadoc)

(define* (install-jars #:key outputs #:allow-other-keys)
  (let ((share (string-append (assoc-ref outputs "out")
                              "/share/java")))
    (for-each (λ (f) (install-file f share))
              (find-files "." "\\.jar2$"))))

(define* (build-javadoc #:key (make-flags '()) #:allow-other-keys)
  (zero? (apply system* `("ant" "javadoc" ,@make-flags))))

;(define* (install-javadoc #:key outputs #:allow-other-keys)
;  (let ((docs (string-append (assoc-ref outputs "doc")
;                             "/share/doc/" ,name "-" ,version "/")))
;    (mkdir-p docs)
;    (copy-recursively "target/apidocs" docs)
;    ))

;(define-public java-commons-io-2.5
  (package
    (name "java-commons-io")
    (version "2.5")
    (source (origin
      (method url-fetch)
      (uri (apache-commons-url "io" version))
      (sha256 (base32 "0q5y41jrcjvx9hzs47x5kdhnasdy6rm4bzqd2jxl02w717m7a7v3"))))
    (build-system ant-build-system)
    (outputs '("out" "doc"))
    (arguments
     `(#:test-target "test"
       #:phases
       (modify-phases %standard-phases
         (add-after 'unpack 'symlink-junit.jar
           (lambda* (#:key inputs #:allow-other-keys)
             (let ((junit (assoc-ref inputs "java-junit"))
                   (junit-version "4.12")) ; from build.xml
               (mkdir-p "lib")
	       (symlink (string-append junit "/share/java/junit.jar")
			(string-append "lib/junit-" junit-version ".jar")))
             ))

         (add-after 'build 'build-javadoc ;build-javadoc)
           (lambda* (#:key (make-flags '()) #:allow-other-keys)
             (zero? (apply system* `("ant" "javadoc" ,@make-flags)))))
         (replace 'install ;install-jars)
           (lambda* (#:key outputs #:allow-other-keys)
             (let ((share (string-append (assoc-ref outputs "out") 
                                         "/share/java")))
               (for-each (λ (f) (install-file f share))
                         (find-files "target" "\\.jar$")))))
         ; todo: install poms for maven
         (add-after 'install 'install-doc ;install-javadoc)
           (lambda* (#:key outputs #:allow-other-keys)
             (let ((docs (string-append (assoc-ref outputs "doc")
                                        "/share/doc/" ,name "-" ,version "/")))
               (mkdir-p docs)
               (copy-recursively "target/apidocs" docs)
               )))

)))
    (native-inputs
     `(("java-junit" ,java-junit)
       ("(java-hamcrest-core" ,java-hamcrest-core)))
    (home-page "http://commons.apache.org/io/")
    (synopsis "Common useful IO related classes")
    (description "Commons-IO contains utility classes, stream implementations,
file filters and endian classes.")
    (license asl2.0)
);)

;(define-public java-commons-cli-2.5
  (package
    (name "java-commons-cli")
    (version "1.3.1")
    (source (origin
      (method url-fetch)
      (uri (apache-commons-url "cli" version))
      (sha256 (base32 "1fkjn552i12vp3xxk21ws4p70fi0lyjm004vzxsdaz7gdpgyxxyl"))))
    (build-system ant-build-system)
    ; todo: javadoc
    (arguments
     ; commons-cli does not provida a proper build.xml but seems to require
     ; maven for building
     `(#:jar-name (string-append "commons-cli-" ,version ".jar")
       #:phases
       (modify-phases %standard-phases
         ; todo: install poms for maven
         (delete 'check))))
    (native-inputs
     `(("java-junit" ,java-junit)))
    (home-page "http://commons.apache.org/cli/")
    (synopsis "parsing command line options")
    (description "Commons-CLI library provides an API for parsing command line
options passed to programs.  It's also able to print help messages detailing
the options available for a command line tool.")
    (license asl2.0)
);)

(package
    (name "java-commons-codec")
    (version "1.10")
    (source (origin
      (method url-fetch)
      (uri (apache-commons-url "codec" version))
      (sha256 (base32 "1w9qg30y4s0x8gnmr2fgj4lyplfn788jqxbcz27lf5kbr6n8xr65"))))
    (build-system ant-build-system)
    (outputs '("out" "doc"))
    (arguments
     ; commons-cli does not provida a proper build.xml but seems to require
     ; maven for building
     `(#:test-target "test"
       #:phases
       (modify-phases %standard-phases
         (delete 'check)
         (add-after 'build 'build-javadoc ;build-javadoc)
           (lambda* (#:key (make-flags '()) #:allow-other-keys)
             (zero? (apply system* `("ant" "javadoc" ,@make-flags)))))
         (replace 'install ;install-jars)
           (lambda* (#:key outputs #:allow-other-keys)
             (let ((share (string-append (assoc-ref outputs "out") 
                                         "/share/java")))
               (for-each (λ (f) (install-file f share))
                         (find-files "dist" "\\.jar$")))))
         ; todo: install poms for maven
         (add-after 'install 'install-doc ;install-javadoc)
           (lambda* (#:key outputs #:allow-other-keys)
             (let ((docs (string-append (assoc-ref outputs "doc")
                                        "/share/doc/" ,name "-" ,version "/")))
               (mkdir-p docs)
               (copy-recursively "dist/docs/api" docs)
               )))
)))
    (native-inputs
     `(("java-junit" ,java-junit)))
    (home-page "http://commons.apache.org/codec/")
    (synopsis "Common encoders and decoders such as Base64, Hex, Phonetic and URLs")
    (description "")
    (license asl2.0)
);)



;(define-public java-commons-lang-2.6
  (package
    (name "java-commons-lang")
    ; note: current release is lang3-3.4 (mind the different archive name)
    (version "2.6")
    (source (origin
      (method url-fetch)
      (uri (apache-commons-url "lang" version))
      (sha256 (base32 "1mxwagqadzx1b2al7i0z1v0r235aj2njdyijf02szq0vhmqrfiq5"))))
    (build-system ant-build-system)
    (outputs '("out" "doc"))
    (arguments
     `(#:test-target "test"
       #:phases
       (modify-phases %standard-phases
         (delete 'check) ; todo: make tests work
         (add-after 'unpack 'symlink-junit.jar
           (lambda* (#:key inputs #:allow-other-keys)
             (let ((junit (assoc-ref inputs "java-junit"))
                   (junit-version "4.12")) ; from build.xml
               (mkdir-p "lib")
	       (symlink (string-append junit "/share/java/junit.jar")
			(string-append "lib/junit-" junit-version ".jar")))
             ))
         (add-before 'check 'set-tzdir
           (lambda* (#:key inputs #:allow-other-keys)
             (setenv "TZDIR"
                     (string-append (assoc-ref inputs "tzdata")
                                    "/share/zoneinfo"))
             #t))
         (add-after 'build 'build-javadoc ;build-javadoc)
           (lambda* (#:key (make-flags '()) #:allow-other-keys)
             (zero? (apply system* `("ant" "javadoc" ,@make-flags)))))
         (replace 'install ;install-jars)
           (lambda* (#:key outputs #:allow-other-keys)
             (let ((share (string-append (assoc-ref outputs "out") 
                                         "/share/java")))
               (for-each (λ (f) (install-file f share))
                         (find-files "target" "\\.jar$")))))
         ; todo: install poms for maven
         (add-after 'install 'install-doc ;install-javadoc)
           (lambda* (#:key outputs #:allow-other-keys)
             (let ((docs (string-append (assoc-ref outputs "doc")
                                        "/share/doc/" ,name "-" ,version "/")))
               (mkdir-p docs)
               (copy-recursively "target/apidocs" docs)
               )))

)))
    (native-inputs
     `(("java-junit" ,java-junit)
       ; The test-suite tests some timezone dependant functions,
       ; thus tzdata needs to be installed.
       ("tzdata", tzdata)
       ;("(java-hamcrest-core" ,java-hamcrest-core)
))
    (home-page "http://commons.apache.org/lang/")
    (synopsis "Common useful IO related classes")
    (description "Commons-IO contains utility classes, stream implementations,
file filters and endian classes.")
    (license asl2.0)
);)



;(define-public java-commons-logging-2.6
  (package
    (name "java-commons-logging")
    (version "1.2")
    (source (origin
      (method url-fetch)
      (uri (apache-commons-url "logging" version))
      (sha256 (base32 "10bwcy5w8d7y39n0krlwhnp8ds3kj5zhmzj0zxnkw0qdlsjmsrj9"))))
    (build-system ant-build-system)
    (outputs '("out" "doc"))
    (arguments
     `(#:test-target "test"
       #:build-target "compile"
       #:phases
       (modify-phases %standard-phases
         (delete 'check) ; todo: make tests work
         (add-after 'unpack 'symlink-junit.jar
           (lambda* (#:key inputs #:allow-other-keys)
             (let ((junit (assoc-ref inputs "java-junit"))
                   (junit-version "4.12")) ; from build.xml
               (mkdir-p "lib")
	       (symlink (string-append junit "/share/java/junit.jar")
			(string-append "lib/junit-" junit-version ".jar")))
             ))
         (add-after 'build 'build-javadoc ;build-javadoc)
           (lambda* (#:key (make-flags '()) #:allow-other-keys)
             (zero? (apply system* `("ant" "javadoc" ,@make-flags)))))
         (replace 'install ;install-jars)
           (lambda* (#:key outputs #:allow-other-keys)
             (let ((share (string-append (assoc-ref outputs "out") 
                                         "/share/java")))
               (for-each (λ (f) (install-file f share))
                         (find-files "target" "\\.jar$")))))
         ; todo: install poms for maven
         (add-after 'install 'install-doc ;install-javadoc)
           (lambda* (#:key outputs #:allow-other-keys)
             (let ((docs (string-append (assoc-ref outputs "doc")
                                        "/share/doc/" ,name "-" ,version "/")))
               (mkdir-p docs)
               (copy-recursively "target/apidocs" docs)
               )))

)))
    (native-inputs
     `(("java-junit" ,java-junit)
       ;avalon,
       ;("(java-hamcrest-core" ,java-hamcrest-core)
))
    (home-page "http://commons.apache.org/logging/")
    (synopsis "Common useful IO related classes")
    (description "Commons-IO contains utility classes, stream implementations,
file filters and endian classes.")
    (license asl2.0)
);)

[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 2430 bytes --]

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: State of maven build system, gradle and Apache commens
  2016-09-02 10:44       ` Hartmut Goebel
@ 2016-09-02 11:48         ` Ricardo Wurmus
  2016-09-02 12:43           ` Hartmut Goebel
  0 siblings, 1 reply; 13+ messages in thread
From: Ricardo Wurmus @ 2016-09-02 11:48 UTC (permalink / raw)
  To: Hartmut Goebel; +Cc: guix-devel


Hartmut Goebel <h.goebel@goebel-consult.de> writes:

> Meantime I managed to build commons-io, commons-cli, commons-lang and
> commons-codec.

Cool!

> I found all of these need intervention for building, as there is no
> "install" target (maybe I missed something). Echo of the packages
> behaves a bit different (e.g. different directory names), while
> sharing some common patterns. I'll attach my WIP for your convenience.

“ant-build-system” creates a “build.xml” with an install target when
“#:jar-name” is provided.  This is useful in case there’s only a
“pom.xml” and the package provides a single jar.

~~ Ricardo

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: State of maven build system, gradle and Apache commens
  2016-09-02 11:48         ` Ricardo Wurmus
@ 2016-09-02 12:43           ` Hartmut Goebel
  2016-09-02 14:24             ` Ricardo Wurmus
  0 siblings, 1 reply; 13+ messages in thread
From: Hartmut Goebel @ 2016-09-02 12:43 UTC (permalink / raw)
  To: guix-devel


[-- Attachment #1.1: Type: text/plain, Size: 1265 bytes --]

Am 02.09.2016 um 13:48 schrieb Ricardo Wurmus:
>> > I found all of these need intervention for building, as there is no
>> > "install" target (maybe I missed something). Echo of the packages
>> > behaves a bit different (e.g. different directory names), while
>> > sharing some common patterns. I'll attach my WIP for your convenience.
> “ant-build-system” creates a “build.xml” with an install target when
> “#:jar-name” is provided.  This is useful in case there’s only a
> “pom.xml” and the package provides a single jar.

 Yes, this is what you wrote earlier today. But most of these (four)
commons packages habe a build.xml, But they behave differently. Some
build into "target", some into "dist/", some put docs in "apidocs/"
others into "docs/api/".

Or do you suggest to use a build.xml created be ant-build-system?


-- 
Schönen Gruß
Hartmut Goebel
Dipl.-Informatiker (univ), CISSP, CSSLP, ISO 27001 Lead Implementer
Information Security Management, Security Governance, Secure Software
Development

Goebel Consult, Landshut
http://www.goebel-consult.de

Blog:
http://www.goebel-consult.de/blog/fortbildung-iso-27001-lead-implementer
Kolumne: http://www.cissp-gefluester.de/2010-09-mut-zur-beschraenkung


[-- Attachment #1.2: Type: text/html, Size: 2693 bytes --]

[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 2430 bytes --]

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: State of maven build system, gradle and Apache commens
  2016-09-02 12:43           ` Hartmut Goebel
@ 2016-09-02 14:24             ` Ricardo Wurmus
  0 siblings, 0 replies; 13+ messages in thread
From: Ricardo Wurmus @ 2016-09-02 14:24 UTC (permalink / raw)
  To: Hartmut Goebel; +Cc: guix-devel


Hartmut Goebel <h.goebel@goebel-consult.de> writes:

> Am 02.09.2016 um 13:48 schrieb Ricardo Wurmus:
>
>     
>         > I found all of these need intervention for building, as there is no
>> "install" target (maybe I missed something). Echo of the packages
>> behaves a bit different (e.g. different directory names), while
>> sharing some common patterns. I'll attach my WIP for your convenience.
>
>     “ant-build-system” creates a “build.xml” with an install target when
> “#:jar-name” is provided.  This is useful in case there’s only a
> “pom.xml” and the package provides a single jar.
>
> Yes, this is what you wrote earlier today. But most of these (four)
> commons packages habe a build.xml, But they behave differently. Some
> build into "target", some into "dist/", some put docs in "apidocs/"
> others into "docs/api/".
>
> Or do you suggest to use a build.xml created be ant-build-system?

This depends on the package and the expected output (e.g. one jar file
to be installed).  The build.xml generated by the ant-build-system does
not build docs because it’s supposed to work for most Java packages.

We could change the ant-build-system such that a smarter “build.xml”
would be generated, but I think if a project provides a “build.xml” we
should be using it, unless it’s really defective or close to useless.

Another option is to write procedures to parse the “build.xml” and add
custom targets, but since I don’t know what to expect in the build files
I cannot think of a general approach that would be useful here.

~~ Ricardo

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: State of maven build system, gradle and Apache commens
  2016-09-01 12:03 ` Ricardo Wurmus
  2016-09-01 16:51   ` Hartmut Goebel
@ 2016-09-05 22:15   ` Björn Höfling
  2016-09-06  6:54     ` Ricardo Wurmus
  2016-09-06  7:32     ` Hartmut Goebel
  1 sibling, 2 replies; 13+ messages in thread
From: Björn Höfling @ 2016-09-05 22:15 UTC (permalink / raw)
  To: Ricardo Wurmus; +Cc: guix-devel, Hartmut Goebel

Hi Hartmut and Ricardo,

On Thu, 1 Sep 2016 14:03:10 +0200
Ricardo Wurmus <ricardo.wurmus@mdc-berlin.de> wrote:

> 
> Hartmut Goebel <h.goebel@goebel-consult.de> writes:
> 
> > is anyone working on this? (I'm lacking knowledge to help with maven
> > or gradle, but could help with commons.)
> 
> We are still a long way off before get to a working maven build
> system. I have a few more Java packages sitting here, but it’s not
> much.
> 
> We first need to recursively package all dependencies of Maven.  The
> next packages on my list are “java-javax-mail” (done) and
> “java-log4j-core”, which needs the following packages:
> 
>     javax-persistence
>     javax-jms
>     java-zeromq
>     kafka
>     apache-commons
> 
> These might have unpackaged dependencies of their own.  If you took
> over “apache-commons” that would be very helpful.  You should be able
> to use the “ant-build-system” to get started, even if it doesn’t
> result in the prettiest packages.
> 
> Once we actually have Maven packaged (completely from source without
> cheating) we should take a look at the existing packages again and see
> if we should install jars with a directory layout that Maven expects.
> Until then I wouldn’t bother trying to anticipate all these issues.

I'm interested in which version of maven do you start to create? Which
version(s) of the dependencies/plugins are you rebuilding?

Here is my experience so far: Last month I started looking at the maven
build-process too. I know that it wouldn't be that easy, but it's
harder than expected.

First, I asked on maven-devel [0], but I had the feeling they don't
understand the philosophy behind working with source dependencies
instead of binary ones.

Then I looked for myself at different versions of Maven and decided to
go with version 1.1 and bootstrap me up. But even this has hard and
funny dependencies:

For example, dom4j-1.7-20060614.jar has in it's META-INF written:
"*Note* that this is a custom-built version for the Maven project. It
was built from dom4j cvs trunk as of 2006-06-08 with the branch
DOM4J_1_X_BRANCH merged in."

OK, the branch is still there on SourceForge, but can I really be sure
to get the source code they used to build the jar-file? Or is that
ultimately lost in Java/Apache history?

Next, dom4j and others use forehead-1.0-beta-5.jar. The original
project is no longer there. Luckily I found a copy on a Gentoo mirror
[1].

Other dependencies, even relatively old ones need Maven in order to
compile (at least they use Maven originally, maybe it's possible to
build them with some Ant task too). That is the case for
commons-jelly/1.0.1-20060717, which by the way is again a patched
version ("*Note* that this is a custom-built version for the Maven
project. It was built from svn trunk as of 2006-07-17 (r 422982) but
with the fixes for JELLY-213 and JELLY-214 reverted").

How do you proceed? Do you have an issue raised where we can share
knowledge/coordinate next steps?

Björn


[0] https://www.mail-archive.com/dev@maven.apache.org/msg110304.html
(Post from Björn Höfling at Mon, 22 Aug 2016 23:26:10 -0700 on dev at
maven dot apache dot org)

[1] http://ftp.fi.debian.org/gentoo/distfiles/forehead-1.0_beta5.tbz2

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: State of maven build system, gradle and Apache commens
  2016-09-05 22:15   ` Björn Höfling
@ 2016-09-06  6:54     ` Ricardo Wurmus
  2016-09-06  7:32     ` Hartmut Goebel
  1 sibling, 0 replies; 13+ messages in thread
From: Ricardo Wurmus @ 2016-09-06  6:54 UTC (permalink / raw)
  To: Björn Höfling; +Cc: guix-devel, Hartmut Goebel


Hi Björn,

> I'm interested in which version of maven do you start to create? Which
> version(s) of the dependencies/plugins are you rebuilding?

I decided to start with the latest and build as many dependencies as
possible without Maven.  I briefly considered packaging an older version
but ran into similar issues of provenance as you have, so I didn’t
investigate further.

~~ Ricardo

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: State of maven build system, gradle and Apache commens
  2016-09-05 22:15   ` Björn Höfling
  2016-09-06  6:54     ` Ricardo Wurmus
@ 2016-09-06  7:32     ` Hartmut Goebel
  2016-09-06 20:43       ` Björn Höfling
  2016-09-12 11:26       ` Java hand-over (was: State of maven build system, gradle and Apache commens) Hartmut Goebel
  1 sibling, 2 replies; 13+ messages in thread
From: Hartmut Goebel @ 2016-09-06  7:32 UTC (permalink / raw)
  To: guix-devel


[-- Attachment #1.1: Type: text/plain, Size: 2062 bytes --]

Am 06.09.2016 um 00:15 schrieb Björn Höfling:
> I'm interested in which version of maven do you start to create? Which
> version(s) of the dependencies/plugins are you rebuilding?

I started building the current version of maven, since the others are
outdated and I did not want to rely on unmaintained software.

> How do you proceed? Do you have an issue raised where we can share
> knowledge/coordinate next steps?

I'll convert my intermediate results into patches and some "report" to
the mailinglist later this week.


I gave up on packaging further Java packages. It's a abottomless pit of
recursive dependencies.

"Bootstrapping" maven requires some pre-built .jar files (some of which
are included in maven's "source"). But building these .jar files
requires maven to find it's way through all the build-steps. There is
some "maven-ant-plugin" which is said to "Generates an Ant build file
from a POM." but (since it is a maven-plugin), it again requires maven.

Debian has some "maven-ant-helper" which contains some default
"maven-build.xml", but again requires maven.


Later this week I'll prepare my work and some ides so others can pick up
and then Java can see my backside.

Side note;: I always had a bad feeling about Java software, but now I
have a informed position, why Java software is of bad quality. One must
only look at these cyclic build-dependencies and the sheer amount of
packages from so many different sources required to package even
"common" stuff. Example: some "easymock" package requires a "dexmaker"
package from google (which seems to be for access in android .dex
files). Such a crap!

-- 
Schönen Gruß
Hartmut Goebel
Dipl.-Informatiker (univ), CISSP, CSSLP, ISO 27001 Lead Implementer
Information Security Management, Security Governance, Secure Software
Development

Goebel Consult, Landshut
http://www.goebel-consult.de

Blog: http://www.goebel-consult.de/blog/ehrlichkeit-made-in-germany
Kolumne: http://www.cissp-gefluester.de/2010-06-adobe-und-der-maiszunsler


[-- Attachment #1.2: Type: text/html, Size: 3573 bytes --]

[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 2430 bytes --]

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: State of maven build system, gradle and Apache commens
  2016-09-06  7:32     ` Hartmut Goebel
@ 2016-09-06 20:43       ` Björn Höfling
  2016-09-12 11:26       ` Java hand-over (was: State of maven build system, gradle and Apache commens) Hartmut Goebel
  1 sibling, 0 replies; 13+ messages in thread
From: Björn Höfling @ 2016-09-06 20:43 UTC (permalink / raw)
  Cc: guix-devel

On Tue, 6 Sep 2016 09:32:53 +0200
Hartmut Goebel <h.goebel@goebel-consult.de> wrote:

> Am 06.09.2016 um 00:15 schrieb Björn Höfling:

[..]

> > How do you proceed? Do you have an issue raised where we can share
> > knowledge/coordinate next steps?
> 
> I'll convert my intermediate results into patches and some "report" to
> the mailinglist later this week.

I'm interested in your report and want to go on with Maven on GuixSD.

 
> I gave up on packaging further Java packages. It's a abottomless pit
> of recursive dependencies.

Java people care too little about the dependencies of their
dependencies. I have to point fingers at myself too. I hope that
building everything from source and caring more about the software
freedom helps a bit with that.

But JavaScript/NPM is even worse.


Björn

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Java hand-over (was: State of maven build system, gradle and Apache commens)
  2016-09-06  7:32     ` Hartmut Goebel
  2016-09-06 20:43       ` Björn Höfling
@ 2016-09-12 11:26       ` Hartmut Goebel
  1 sibling, 0 replies; 13+ messages in thread
From: Hartmut Goebel @ 2016-09-12 11:26 UTC (permalink / raw)
  To: guix-devel


[-- Attachment #1.1: Type: text/plain, Size: 25303 bytes --]

Hello,

as stated earlier in this thread. I'm not going to spend any more time
on packaging java. But for others, more skilled in this mine-field,
being able to continue the work, here are some notes. Even if non of
this is working it at least saves some time figuring out the source-urls
and checksums :-)

So here are my scratches from my work on packaging some java packages
and maven. Good Luck!

Notes for a "junits" ant task: outputting the reports into some
"${build.home}/test-reports" seems to be a good idea.

;    <target name="junit" depends="compile-test">
;            <test name="${test.entry}"
todir="${build.home}/test-reports" if="test.entry"/>
;            <batchtest fork="yes" todir="${build.home}/test-reports"
unless="test.entry">
;                <fileset dir="${test.home}">
;                    <include name="**/*Test.java"/>
;                    <exclude name="**/*AbstractTest.java"/>
;                </fileset>
;            </batchtest>
;            <batchtest>
;                <fileset dir="src/test" includes="**/*Test.java"/>
;            </batchtest>
;    <target name="compile-test" depends="compile" description="Compile
tests">
;        <compile module="test" refid="path.run"/>
;    </target>



; -*- mode: scheme -*-

(use-modules (guix)
             (guix build-system ant)
             (guix build java-utils)
(guix git-download)
((guix licenses) #:prefix license:)
(gnu packages base)
(gnu packages java)
(gnu packages zip)
)

;----------


(define-public maven-ant-helper ; todo: check content of files
"
Helper scripts for building Maven components with ant

This is a package from Debian. It adds some environment that should simplify
generating of (originally) Debian packages. I seems to be meant to use maven
and implement something like the "default build.xml" we have for
ant-build-system. I doubt this is the way to go since it does thing guix
typically does in guile. Additionally it is designed to be felxible which
makes it more complicated again.

It includes a "modello" implementation, which *may* be worth carving out -
some person knowledable in java may be able to tell if it.
"
  (package
    (name "maven-ant-helper")
    (version "7.11")
    (source (origin
      (method git-fetch)
      (uri (git-reference
            (url "git://anonscm.debian.org/pkg-java/maven-ant-helper.git")
            (commit (string-append "debian/" version))))
      (sha256 (base32
"1aldw40b5bv0sx3nxp0m3zwdwrnyp1cslwqv4z1ifz1jkj4zm8vb"))))
    (build-system ant-build-system)
    ; todo: build javadocs
    (arguments
     `(#:jar-name (string-append ,name "-" ,version ".jar")
       #:phases
       (modify-phases %standard-phases
     (add-after 'unpack 'patch-files
           (lambda* (#:key outputs #:allow-other-keys)
             (let* ((out (assoc-ref outputs "out"))
                    (share (string-append out "/share/maven-ant-helper")))
               (substitute* "maven-build.xml"
             ; lib${package}-java -> java-${package}
                 (("<property name=\"bin.package\"
value=\"lib\\$\\{package\\}-java\"")
                  "<property name=\"bin.package\"
value=\"java-\\$\\{package\\}\"")
                 (("\"/usr/share/maven-ant-helper/")
                  (string-append "\"" share "/"))
                 ))))
         (add-after 'install 'install-other-files
           (lambda* (#:key outputs #:allow-other-keys)
             (let* ((out (assoc-ref outputs "out"))
            (share (string-append out "/share/maven-ant-helper")))
           (install-file "maven-build.xml" share)
           (install-file "maven-defaults.properties" share)
           (install-file "manifest.mf" share)
           (copy-recursively "bootstrap" (string-append share "/bootstrap"))
           ))))))
    (home-page
"https://anonscm.debian.org/cgit/pkg-java/maven-ant-helper.git")
    (synopsis "Helper scripts for building Maven components with ant")
    (description "An environment that can be used to simplify the
creation of GUIX packages to support the Maven system.  A \"modello\"
ant task is also provided.

maven-build.xml attempts to reproduce the Maven build life-cycle. You
can use it to build your jar or javadoc. If you have
java-maven-core installed, you can even use it to launch some
Maven plugins to generate some code.")
    (license license:asl2.0)))


(define-public maven-ant-tasks ; fails to build
"
I assume this is a task to run ant from a maven .pom file. I though it might
be useful, but did not get any further.
"
  (package
    (name "maven-ant-tasks")
    (version "2.1.3")
    (source (origin
      (method url-fetch)
      (uri (string-append "https://archive.apache.org/dist/maven/"
                          "ant-tasks/" version "/source/"
                          "maven-ant-tasks-" version "-src.zip")) ; no
tar.gz
      (sha256 (base32
"1d3iplx8yf19l0zyan6jgy94sdly9lylagjdwmclzw6zk848z0rv"))))
    (build-system ant-build-system)
    (outputs '("out" "doc"))
    (arguments
     `(#:test-target "test"
       ;#:jar-name (string-append "easymock-" ,version ".jar")
       ))
    (native-inputs
     `(("unzip" ,unzip)
       ("java-junit" ,java-junit)))
    (home-page "")
    (synopsis "")
    (description "")
    (license license:asl2.0)))


(define-public maven-ant-plugin ; requires maven :-(
  (package
    (name "maven-ant-plugin")
    (version "2.4")
    (source (origin
      (method url-fetch)
      (uri (string-append "https://archive.apache.org/dist/maven/plugins/"
                          "maven-ant-plugin-" version
"-source-release.zip"))
      (sha256 (base32
"1jac72mvmqaga7qmdj7xfpdjqb4925aw6jimb4izzy45fwd8dsff"))))
    (build-system ant-build-system)
    ;(outputs '("out" "doc"))
    (arguments
     `(#:jar-name (string-append ,name "-" ,version ".jar")
       ))
    (native-inputs
     `(;("unzip" ,unzip)
;       ("java-junit" ,java-junit)
))
    (home-page "")
    (synopsis "Generates an Ant build file from a POM.")
    (description "")
    (license license:asl2.0)))


(define-public maven ; fails to build
"

This should become the main maven package.

Maven requires *a lot* of other jar-files, see list below. 'Bootstrapping'
this package (as the documentation calls it) required some .jar files to
exist. Some of which are included, others are downloaded from the internet.

The source is organized into some sub-projects, e.g 'maven-artifacts',
some of
which I ewas able to build - see the package descriptions below. Using
separate packages for each of these sub-projects will propably not be
senceful, I just did it to figure out how far I can get.

subprojects: artifact, builder-support, compat, core, embedder, model,
             model-builder, plugin-api repositoy-metadata, settings,
             settings-builder

One solution could be to process each of the 'configure', 'build', 'install'
steps of the ant-builder for each subproject.

maven-core requires: Subprojects: maven-artifact, maven-execution,
    maven-model, maven-graph maven-internal maven-lifecycle maven-plugin
    maven-project maven-repository maven-session

    External: plexus-component plexus-logging eclipse-aether
        eclipse-aether-repository eclipse-aether-util
        com.google.common.collect

"
  (package
    (name "maven")
    (version "3.3.9")
    (source (origin
      (method url-fetch)
      (uri (string-append "https://archive.apache.org/dist/maven/"
                          "maven-3/" version "/source/"
                          "apache-maven-" version "-src.tar.gz"))

      todo: remove included .jar files. Attention: some .jar-files are
in the
            test-suite an seem to be used for checking results.

      (sha256 (base32
"1g0iavyb34kvs3jfrx2hfnr8lr11m39sj852cy7528wva1glfl4i"))))
    (build-system ant-build-system)
    (outputs '("out" "doc"))
    (arguments
     `(#:test-target "test"
       #:build-target "all"
       ;#:jar-name (string-append "easymock-" ,version ".jar")
       #:phases
       (modify-phases %standard-phases
         (add-after 'unpack 'create-build.properties
           ; ant -Dmaven.home="$HOME/apps/maven/apache-maven-3.3.x-SNAPSHOT"
           (lambda* (#:key outputs #:allow-other-keys)
             (let ((out (assoc-ref outputs "out")))
               (setenv "M2_HOME" out)))))))
    (native-inputs
     `(("java-junit" ,java-junit)))
    (home-page "")
    (synopsis "")
    (description "")
    (license license:asl2.0)))


(define-public java-maven-subproject-artifact ; builds
  (package
    (name "java-maven-subproject-artifact")
    (version "3.3.9")
    (source (origin
      (method url-fetch)
      (uri (string-append "https://archive.apache.org/dist/maven/"
                          "maven-3/" version "/source/"
                          "apache-maven-" version "-src.tar.gz"))
      (sha256 (base32
"1g0iavyb34kvs3jfrx2hfnr8lr11m39sj852cy7528wva1glfl4i"))))
    (build-system ant-build-system)
    ;(outputs '("out" "doc"))
    (arguments
     `(#:jar-name (string-append "maven-artifact-" ,version ".jar")
       #:src-dir "src/main"
       #:phases
       (modify-phases %standard-phases
         (add-after 'unpack 'change-dir
           (lambda _
             (chdir "maven-artifact"))))
         ))
    (native-inputs
     `(("java-commons-lang3" ,java-commons-lang3)
       ("java-plexus-util" ,java-plexus-util)
       ;("java-junit" ,java-junit)
))
    (home-page "")
    (synopsis "")
    (description "")
    (license license:asl2.0)))

(define-public java-maven-subproject-builder-support ; builds
  (package
    (name "java-maven-subproject-builder-support")
    (version "3.3.9")
    (source (origin
      (method url-fetch)
      (uri (string-append "https://archive.apache.org/dist/maven/"
                          "maven-3/" version "/source/"
                          "apache-maven-" version "-src.tar.gz"))
      (sha256 (base32
"1g0iavyb34kvs3jfrx2hfnr8lr11m39sj852cy7528wva1glfl4i"))))
    (build-system ant-build-system)
    ;(outputs '("out" "doc"))
    (arguments
     `(#:jar-name (string-append "maven-builder-support-" ,version ".jar")
       #:src-dir "src/main"
       #:phases
       (modify-phases %standard-phases
         (add-after 'unpack 'change-dir
           (lambda _
             (chdir "maven-builder-support"))))
         ))
    (native-inputs
     `(("java-commons-lang3" ,java-commons-lang3)
       ("java-plexus-util" ,java-plexus-util)
       ;("java-junit" ,java-junit)
))
    (home-page "")
    (synopsis "")
    (description "")
    (license license:asl2.0)))

; settings-builder: maven-builder-support, maven-settings, plexus-utils,
plexus-interpolation,
;                   plexus-component-annotations, plexus-sec-dispatcher,
commons-lang3

(define-public java-maven-subproject-settings ; builds
  (package
    (name "java-maven-subproject-settings")
    (version "3.3.9")
    (source (origin
      (method url-fetch)
      (uri (string-append "https://archive.apache.org/dist/maven/"
                          "maven-3/" version "/source/"
                          "apache-maven-" version "-src.tar.gz"))
      (sha256 (base32
"1g0iavyb34kvs3jfrx2hfnr8lr11m39sj852cy7528wva1glfl4i"))))
    (build-system ant-build-system)
    ;(outputs '("out" "doc"))
    (arguments
     `(#:jar-name (string-append "maven-settings-" ,version ".jar")
       #:src-dir "src/main"
       #:phases
       (modify-phases %standard-phases
         (add-after 'unpack 'change-dir
           (lambda _
             (chdir "maven-settings"))))
         ))
    (native-inputs
     `(("java-commons-lang3" ,java-commons-lang3)
       ("java-plexus-util" ,java-plexus-util)
       ;("java-junit" ,java-junit)
))
    (home-page "")
    (synopsis "")
    (description "")
    (license license:asl2.0)))


(define-public java-maven-subproject-repository-metadata ; builds
  (package
    (name "java-maven-subproject-repository-metadata")
    (version "3.3.9")
    (source (origin
      (method url-fetch)
      (uri (string-append "https://archive.apache.org/dist/maven/"
                          "maven-3/" version "/source/"
                          "apache-maven-" version "-src.tar.gz"))
      (sha256 (base32
"1g0iavyb34kvs3jfrx2hfnr8lr11m39sj852cy7528wva1glfl4i"))))
    (build-system ant-build-system)
    ;(outputs '("out" "doc"))
    (arguments
     `(#:jar-name (string-append "maven-repository-metadata-" ,version
".jar")
       #:src-dir "src/main"
       #:phases
       (modify-phases %standard-phases
         (add-after 'unpack 'change-dir
           (lambda _
             (chdir "maven-repository-metadata"))))
         ))
    (native-inputs
     `(;("java-commons-lang3" ,java-commons-lang3)
       ("java-plexus-util" ,java-plexus-util)
       ;("java-junit" ,java-junit)
))
    (home-page "")
    (synopsis "")
    (description "")
    (license license:asl2.0)))


; model-builder: plexus-utils, plexus-interpolation,
plexus-component-annotations, maven-model,
;                maven-artifact, maven-builder-support,
com.google.guava, commons-lang3,
;                org.eclipse.sisu.plexus


(define-public java-maven-subproject-model ; fails to build
  (package
    (name "java-maven-subproject-model")
    (version "3.3.9")
    (source (origin
      (method url-fetch)
      (uri (string-append "https://archive.apache.org/dist/maven/"
                          "maven-3/" version "/source/"
                          "apache-maven-" version "-src.tar.gz"))
      (sha256 (base32
"1g0iavyb34kvs3jfrx2hfnr8lr11m39sj852cy7528wva1glfl4i"))))
    (build-system ant-build-system)
    ;(outputs '("out" "doc"))
    (arguments
     `(#:jar-name (string-append "maven-model-" ,version ".jar")
       #:src-dir "src/main"
       #:phases
       (modify-phases %standard-phases
         (add-after 'unpack 'change-dir
           (lambda _
             (chdir "maven-model"))))
         ))
    (native-inputs
     `(("java-commons-lang3" ,java-commons-lang3)
       ("java-plexus-util" ,java-plexus-util)
; modello-maven-plugin for building some files
       ("java-junit" ,java-junit)))
    (home-page "")
    (synopsis "")
    (description "")
    (license license:asl2.0)))


;----------


(define-public java-easymock ; requires com.google.dexmaker.stock for
building!
  (package
    (name "java-easymock")
    (version "3.4")
    (source (origin
      (method url-fetch)
      (uri (string-append "https://github.com/easymock/easymock/archive/"
                          "easymock-" version ".tar.gz"))
      (sha256 (base32
"1yzg0kv256ndr57gpav46cyv4a1ns5sj722l50zpxk3j6sk9hnmi"))))
    (build-system ant-build-system)
    ;(outputs '("out" "doc"))
    (arguments
     `(;#:test-target "test"
       #:jar-name (string-append "easymock-" ,version ".jar")
       #:phases
       (modify-phases %standard-phases
         (add-after 'unpack 'chdir
           (lambda _
             ; the core component is in a sub-directory, tests would be in
             ; some `test-…` directory side.
             (chdir "core"))))))
    (inputs
     `(("java-junit" ,java-junit)))
    (home-page "")
    (synopsis "")
    (description "")
    (license license:asl2.0)))


;----------

(define* (apache-commons-url projname version
                             #:optional (basename
                                         (string-append "commons-"
projname)))
  (string-append "mirror://apache/commons/" projname "/source/"
                 basename "-" version "-src.tar.gz"))


(define-public java-commons-beanutils
; requires commons-collections, commons-logging
  (package
    (name "java-commons-beanutils")
    (version "1.9.2")
    (source (origin
      (method url-fetch)
      (uri (apache-commons-url "beanutils" version))
      (sha256 (base32
"0j805kxn6a61s8wxpcj1bw4zcg9dgx3ah6nzk2nqn9sznv9wmz4i"))))
    (build-system ant-build-system)
    (outputs '("out" "doc"))
    (arguments
     `(#:test-target "test"
       ;#:jar-name (string-append "commons-beanutils-" ,version ".jar")
       #:phases
       (modify-phases %standard-phases
         (add-after 'unpack 'symlink-junit.jar symlink-junit-jar-hack)
         (add-after 'build 'build-javadoc ant-build-javadoc)
         (replace 'install (install-jars "target"))
         ; todo: install poms for maven
         (add-after 'install 'install-doc (install-javadoc
"target/apidocs")))))
    (native-inputs
     `(("java-junit" ,java-junit)
       ("java-hamcrest-core" ,java-hamcrest-core)))
    (home-page "http://commons.apache.org/beanutils/")
    (synopsis "")
    (description "")
    (license license:asl2.0)))


(define-public java-commons-chain ; requires commons-logging,
commons-digester
  (package
    (name "java-commons-chain")
    (version "1.2")
    (source (origin
      (method url-fetch)
      (uri (apache-commons-url "chain" version))
      (sha256 (base32
"0lgib3dpkympp8ajlgpfavbzfal9bv685gfa9ygyv091ja772rsd"))))
    (build-system ant-build-system)
    ; todo: javadoc
    (arguments
     ; commons-chain does not provida a proper build.xml but seems to
require
     ; maven for building
     `(#:jar-name (string-append "commons-chain-" ,version ".jar")
       #:phases
       (modify-phases %standard-phases
         ; todo: install poms for maven
         (delete 'check))))
    (native-inputs
     `(("java-junit" ,java-junit)))
    (home-page "http://commons.apache.org/chain/")
    (synopsis "Chain of Responsibility pattern implemention")
    (description "")
    (license license:asl2.0)))

(define-public java-commons-collections ; tests requires easymock, hamcrest
  (package
    (name "java-commons-collections")
    (version "4.1")
    (source (origin
      (method url-fetch)
      (uri (apache-commons-url "collections" version
"commons-collections4"))
      (sha256 (base32
"1krfhvggympq4avk7gh6qafzf6b9ip6r1m4lmacikyx04039m0wl"))))
    (build-system ant-build-system)
    (outputs '("out" "doc"))
    (arguments
     `(#:tests? #f
       #:test-target "test"
       #:phases
       (modify-phases %standard-phases
         (delete 'check)  ; todo: fails to load junit.framework
         (add-after 'unpack 'create-build.properties
           (lambda* (#:key inputs #:allow-other-keys)
             (let ((junit (assoc-ref inputs "java-junit"))
                   (hamcrest (assoc-ref inputs "java-hamcrest"))
                   (easymock (assoc-ref inputs "java-easymock"))
                   (fh (open-output-file "build.properties")))
               (format fh (string-append
                   "junit.jar = " junit "/share/java/junit.jar" "\n"
                   "hamcrest.jar = " hamcrest "/share/java/hamcrest.jar"
"\n"
                   "easymock.jar = " easymock "/share/java/easymock.jar"
"\n"
                   ))
               (close-output-port fh))))
         (add-after 'build 'build-javadoc ant-build-javadoc)
         (replace 'install (install-jars "dist"))
         ; todo: install poms for maven
         (add-after 'install 'install-doc (install-javadoc
"dist/docs/api")))))
    (native-inputs
     `(("java-junit" ,java-junit)))
    ; easymock, hamcrest
    (home-page "http://commons.apache.org/collections/")
    (synopsis "")
    (description "")
    (license license:asl2.0)))

(define-public java-commons-compress ;fails: requires
org.mockito.InjectMocks
; lint okay.
; requires junit, orz.tukaani.xz-1.5,
; powermock-module-junit4, powermock.-api-mockito
  (package
    (name "java-commons-compress")
    (version "1.12")
    (source (origin
      (method url-fetch)
      (uri (apache-commons-url "compress" version))
      (sha256 (base32
"0g36vb2a1zvy021ycy47yr1k7bb8lccc28w9n5ap5zn4dg2480rx"))))
    (build-system ant-build-system)
    ; todo: javadoc
    (arguments
     ; commons-cli does not provida a proper build.xml but seems to require
     ; maven for building
     `(#:jar-name (string-append "commons-compress-" ,version ".jar")
       #:phases
       (modify-phases %standard-phases
         (delete 'check))))
    (inputs
     `(("java-xz" ,java-xz)))
    (native-inputs
     `(("java-junit" ,java-junit)))
    (home-page "http://commons.apache.org/compress/")
    (synopsis "Java API for working with compression and archive formats")
    (description "Apache Commons Compress defines a Java API for working
with
compression and archive formats.  These include: bzip2, gzip, pack200,
xz and
ar, cpio, jar, tar, zip, dump.

This is a part of the Apache Commons Project.")
    (license license:asl2.0)))

(define-public java-commons-configuration
; requires a lot of commons modules and quite some others
  (package
    (name "java-commons-configuration")
    (version "2.1")
    (source (origin
      (method url-fetch)
      (uri (apache-commons-url "configuration" version
"commons-configuration2"))
      (sha256 (base32
"0dk96wjmfl8dz14c2x0zazbcqam5ls6p4b182j8bqml4kzrr6l2v"))))
    (build-system ant-build-system)
    (native-inputs
     `(("java-junit" ,java-junit)))
    (home-page "http://commons.apache.org/configuration/")
    (synopsis "Reading of configuration/preferences files in various
formats")
    (description "")
    (license license:asl2.0)))

;; java-commons-crypto

(define-public java-commons-csv
; requires junit, commons-io, commons-lang3, h2 database
  (package
    (name "java-commons-csv")
    (version "1.4")
    (source (origin
      (method url-fetch)
      (uri (apache-commons-url "csv" version))
      (sha256 (base32
"1l89m0fm2s3xx3v3iynvangymfg2vlyngaj6fgsi457nmsw7m7ij"))))
    (build-system ant-build-system)
    ; todo: javadoc
    (native-inputs
     `(("java-junit" ,java-junit)))
    (home-page "http://commons.apache.org/csv/")
    (synopsis "")
    (description "")
    (license license:asl2.0)))

(define-public java-commons-digester ; requires commons-beanutils,
commons-logging
  (package
    (name "java-commons-digester")
    (version "3.2")
    (source (origin
      (method url-fetch)
      (uri (apache-commons-url "digester" version "commons-digester3"))
      (sha256 (base32
"03kc18dfl5ma50cn02ji7rbhm33qpxyd9js6mvzznf8f7y6pmykk"))))
    (build-system ant-build-system)
    (outputs '("out" "doc"))
    (arguments
     ; commons-cli does not provida a proper build.xml but seems to require
     ; maven for building
     `(#:jar-name (string-append ,name "-" ,version ".jar")
       #:src-dir "src/main"
       #:phases
       (modify-phases %standard-phases
         (add-after 'build 'build-javadoc ant-build-javadoc)
         (replace 'install (install-jars "dist"))
         (add-after 'install 'install-doc (install-javadoc
"dist/docs/api")))))
    (native-inputs
     `(("java-junit" ,java-junit)))
    (home-page "http://commons.apache.org/digester/")
    (synopsis "")
    (description "The Apache Commons Digester package lets you configure an
XML to Java object mapping module which triggers certain actions called
rules
whenever a particular pattern of nested XML elements is recognized.")
    (license license:asl2.0)))


(define-public java-commons-logging ; requires javax.servlet, one of
log4j, avalon, logkit
  (package
    (name "java-commons-logging")
    (version "1.2")
    (source (origin
      (method url-fetch)
      (uri (apache-commons-url "logging" version))
      (sha256 (base32
"10bwcy5w8d7y39n0krlwhnp8ds3kj5zhmzj0zxnkw0qdlsjmsrj9"))))
    (build-system ant-build-system)
    (outputs '("out" "doc"))
    (arguments
     `(#:test-target "test"
       #:build-target "compile"
       #:phases
       (modify-phases %standard-phases
         (delete 'check) ; todo: make tests work
         (add-after 'unpack 'symlink-junit.jar symlink-junit-jar-hack)
         (add-after 'build 'build-javadoc ant-build-javadoc)
         (replace 'install (install-jars "target"))
         ; todo: install poms for maven
         (add-after 'install 'install-doc (install-javadoc
"target/apidocs")))))
    (native-inputs
     `(("java-junit" ,java-junit)
       ;javax.servlet
       ;optional: avalon, logkit, log4j
       ;("java-hamcrest-core" ,java-hamcrest-core)
))
    (home-page "http://commons.apache.org/logging/")
    (synopsis "")
    (description "Apache Commons Logging is a thin adapter allowing
configurable bridging to other, well known logging systems")
    (license license:asl2.0)
))


-- 
Schönen Gruß
Hartmut Goebel
Dipl.-Informatiker (univ), CISSP, CSSLP, ISO 27001 Lead Implementer
Information Security Management, Security Governance, Secure Software
Development

Goebel Consult, Landshut
http://www.goebel-consult.de

Blog:
http://www.goebel-consult.de/blog/bestanden-iso-27001-lead-implementer
Kolumne:
http://www.cissp-gefluester.de/2011-10-aus-der-schublade-in-die-koepfe


[-- Attachment #1.2: Type: text/html, Size: 38168 bytes --]

[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 2430 bytes --]

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2016-09-12 11:27 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-09-01 11:36 State of maven build system, gradle and Apache commens Hartmut Goebel
2016-09-01 12:03 ` Ricardo Wurmus
2016-09-01 16:51   ` Hartmut Goebel
2016-09-02  7:47     ` Ricardo Wurmus
2016-09-02 10:44       ` Hartmut Goebel
2016-09-02 11:48         ` Ricardo Wurmus
2016-09-02 12:43           ` Hartmut Goebel
2016-09-02 14:24             ` Ricardo Wurmus
2016-09-05 22:15   ` Björn Höfling
2016-09-06  6:54     ` Ricardo Wurmus
2016-09-06  7:32     ` Hartmut Goebel
2016-09-06 20:43       ` Björn Höfling
2016-09-12 11:26       ` Java hand-over (was: State of maven build system, gradle and Apache commens) Hartmut Goebel

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).