How to package java classes in an opencms module

"laurent.druart via opencms-dev" <[email protected]> Thu, 7 Aug 2025 16:41:25 +0200
Newsgroups gmane.comp.cms.opencms.devel
Message-ID <[email protected]>
SGVsbG8sCgpJ4oCZbSBzdGlsbCB0ZXN0aW5nIE9wZW5DTVMgYW5kIGkgd3JvdGUgYSB2ZXJ5IHNt
YWxsIGxpYnJhcnksIGEgc3ByaW5nIGJhc2VkIGxpYnJhcnkuIEkgd2FudCB0byB1c2UgdGhlIGJl
YW5zIGluIG15IGpzcCBzbyBpIHdyb3RlIDIgY2xhc3NlczoKClNwcmluZ0JlYW5VdGlscyA6Cgpw
dWJsaWMgY2xhc3MgU3ByaW5nQmVhblV0aWxzIHsKCiAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBM
b2cgTE9HID0gQ21zTG9nLmdldExvZyhTcHJpbmdCZWFuVXRpbHMuY2xhc3MpOwoKICAgIC8qKgog
ICAgICogUsOpY3Vww6hyZSBsZSBzZXJ2aWNlIHV0aWxpc2F0ZXVyCiAgICAgKiBFeGVtcGxlIGQn
dXRpbGlzYXRpb24gZGFucyB1bmUgcGFnZSBKU1AgOgogICAgICogPCUKICAgICAqICAgVXNlclNl
cnZpY2UgdXNlclNlcnZpY2UgPSBTcHJpbmdCZWFuVXRpbHMuZ2V0VXNlclNlcnZpY2UoKTsKICAg
ICAqICAgTGlzdDxVc2VyPiB1c2VycyA9IHVzZXJTZXJ2aWNlLmdldEFsbEFjdGl2ZVVzZXJzKCk7
CiAgICAgKiAlPgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIFVzZXJTZXJ2aWNlIGdldFVzZXJT
ZXJ2aWNlKCkgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgIHJldHVybiBMaWJyYXJ5SW5pdGlh
bGl6ZXIuZ2V0QmVhbihVc2VyU2VydmljZS5jbGFzcyk7CiAgICAgICAgfSBjYXRjaCAoRXhjZXB0
aW9uIGUpIHsKICAgICAgICAgICAgTE9HLmVycm9yKCJFcnJldXIgbG9ycyBkZSBsYSByw6ljdXDD
qXJhdGlvbiBkdSBVc2VyU2VydmljZSIsIGUpOwogICAgICAgICAgICB0aHJvdyBuZXcgUnVudGlt
ZUV4Y2VwdGlvbigiU2VydmljZSB1dGlsaXNhdGV1ciBub24gZGlzcG9uaWJsZSIsIGUpOwogICAg
ICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIE3DqXRob2RlIGfDqW7DqXJpcXVlIHBvdXIgcsOp
Y3Vww6lyZXIgbidpbXBvcnRlIHF1ZWwgc2VydmljZQogICAgICogRXhlbXBsZSA6CiAgICAgKiBN
eVNlcnZpY2Ugc2VydmljZSA9IFNwcmluZ0JlYW5VdGlscy5nZXRTZXJ2aWNlKE15U2VydmljZS5j
bGFzcyk7CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgPFQ+IFQgZ2V0U2VydmljZShDbGFzczxU
PiBzZXJ2aWNlQ2xhc3MpIHsKICAgICAgICB0cnkgewogICAgICAgICAgICByZXR1cm4gTGlicmFy
eUluaXRpYWxpemVyLmdldEJlYW4oc2VydmljZUNsYXNzKTsKICAgICAgICB9IGNhdGNoIChFeGNl
cHRpb24gZSkgewogICAgICAgICAgICBMT0cuZXJyb3IoIkVycmV1ciBsb3JzIGRlIGxhIHLDqWN1
cMOpcmF0aW9uIGR1IHNlcnZpY2U6ICIgKyBzZXJ2aWNlQ2xhc3MuZ2V0U2ltcGxlTmFtZSgpLCBl
KTsKICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlNlcnZpY2Ugbm9uIGRp
c3BvbmlibGU6ICIgKyBzZXJ2aWNlQ2xhc3MuZ2V0U2ltcGxlTmFtZSgpLCBlKTsKICAgICAgICB9
CiAgICB9CgogICAgLyoqCiAgICAgKiBSw6ljdXDDqHJlIHVuIGJlYW4gcGFyIHNvbiBub20KICAg
ICAqIEV4ZW1wbGUgOgogICAgICogT2JqZWN0IGJlYW4gPSBTcHJpbmdCZWFuVXRpbHMuZ2V0QmVh
bigidXNlclNlcnZpY2UiKTsKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBPYmplY3QgZ2V0QmVh
bihTdHJpbmcgYmVhbk5hbWUpIHsKICAgICAgICB0cnkgewogICAgICAgICAgICByZXR1cm4gTGli
cmFyeUluaXRpYWxpemVyLmdldEJlYW4oYmVhbk5hbWUpOwogICAgICAgIH0gY2F0Y2ggKEV4Y2Vw
dGlvbiBlKSB7CiAgICAgICAgICAgIExPRy5lcnJvcigiRXJyZXVyIGxvcnMgZGUgbGEgcsOpY3Vw
w6lyYXRpb24gZHUgYmVhbjogIiArIGJlYW5OYW1lLCBlKTsKICAgICAgICAgICAgdGhyb3cgbmV3
IFJ1bnRpbWVFeGNlcHRpb24oIkJlYW4gbm9uIGRpc3BvbmlibGU6ICIgKyBiZWFuTmFtZSwgZSk7
CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogVsOpcmlmaWUgc2kgbGUgY29udGV4dGUg
U3ByaW5nIGVzdCBkaXNwb25pYmxlCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBp
c0F2YWlsYWJsZSgpIHsKICAgICAgICByZXR1cm4gTGlicmFyeUluaXRpYWxpemVyLmlzU3ByaW5n
Q29udGV4dEF2YWlsYWJsZSgpOwogICAgfQoKICAgIC8qKgogICAgICogTcOpdGhvZGUgdXRpbGl0
YWlyZSBwb3VyIHbDqXJpZmllciBsYSBkaXNwb25pYmlsaXTDqSBhdmFudCB1dGlsaXNhdGlvbgog
ICAgICovCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgZW5zdXJlQXZhaWxhYmxlKCkgewogICAgICAg
IGlmICghaXNBdmFpbGFibGUoKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRl
RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgICAgICJMZSBjb250ZXh0ZSBTcHJpbmcgbidlc3Qg
cGFzIGRpc3BvbmlibGUuICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIlbDqXJpZmll
eiBxdWUgbGUgbW9kdWxlIGVzdCBjb3JyZWN0ZW1lbnQgaW5pdGlhbGlzw6kuIgogICAgICAgICAg
ICApOwogICAgICAgIH0KICAgIH0KfQoKd2l0aCBzdGF0aWMgbWV0aG9kIGdldFVzZXJTZXJ2aWNl
KCkgSSBjYW4gY2FsbCB0aGUgdXNlclNlcnZpY2UgYmVhbi4gTm8gcHJvYmxlbSB3aXRoIGl0LgoK
QW5kIHNlY29uZCBjbGFzcyBMaWJyYXJ5SW5pdGlhbGl6ZXIgd2ljaCBtdXN0IGluaXRpYWxpc2Ug
dGhlIHNwcmluZyBjb250ZXh0IGFuZCBjb25maWd1cmUgaXQ6CgpwdWJsaWMgY2xhc3MgTGlicmFy
eUluaXRpYWxpemVyIGV4dGVuZHMgQV9DbXNNb2R1bGVBY3Rpb24gaW1wbGVtZW50cyBJX0Ntc0V2
ZW50TGlzdGVuZXIgewoKICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBNT0RVTEVfTkFN
RSA9ICJvcGVuY21zLXNwcmluZy1saWJyYXJ5IjsKICAgIHByaXZhdGUgc3RhdGljIEFwcGxpY2F0
aW9uQ29udGV4dCBzcHJpbmdDb250ZXh0OwogICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgb3JnLmFw
YWNoZS5jb21tb25zLmxvZ2dpbmcuTG9nIExPRyA9IENtc0xvZy5nZXRMb2coTGlicmFyeUluaXRp
YWxpemVyLmNsYXNzKTsKCiAgICAvKioKICAgICAqIEluaXRpYWxpc2F0aW9uIGR1IG1vZHVsZQog
ICAgICovCiAgICBAT3ZlcnJpZGUKICAgIHB1YmxpYyB2b2lkIGluaXRpYWxpemUob3JnLm9wZW5j
bXMuZmlsZS5DbXNPYmplY3QgYWRtaW5DbXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG9y
Zy5vcGVuY21zLmNvbmZpZ3VyYXRpb24uQ21zQ29uZmlndXJhdGlvbk1hbmFnZXIgY29uZmlndXJh
dGlvbk1hbmFnZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIENtc01vZHVsZSBtb2R1bGUp
IHsKCiAgICAgICAgTE9HLmluZm8oIkluaXRpYWxpc2F0aW9uIGRlIGxhIGxpYnJhaXJpZSBTcHJp
bmcgY2xhc3NpcXVlIHBvdXIgT3BlbkNNUyIpOwoKICAgICAgICB0cnkgewogICAgICAgICAgICAv
LyBDb25maWd1cmF0aW9uIGRlcyBwcm9wcmnDqXTDqXMgc3lzdMOobWUKICAgICAgICAgICAgY29u
ZmlndXJlU3lzdGVtUHJvcGVydGllcygpOwoKICAgICAgICAgICAgLy8gQ3LDqWF0aW9uIGR1IGNv
bnRleHRlIFNwcmluZyBDTEFTU0lRVUUKICAgICAgICAgICAgQW5ub3RhdGlvbkNvbmZpZ0FwcGxp
Y2F0aW9uQ29udGV4dCBjb250ZXh0ID0gbmV3IEFubm90YXRpb25Db25maWdBcHBsaWNhdGlvbkNv
bnRleHQoKTsKICAgICAgICAgICAgY29udGV4dC5yZWdpc3Rlcihjb20ub3BlbmNtcy5saWJyYXJ5
LmNvbmZpZy5MaWJyYXJ5Q29uZmlndXJhdGlvbi5jbGFzcyk7CiAgICAgICAgICAgIGNvbnRleHQu
cmVmcmVzaCgpOwoKICAgICAgICAgICAgc3ByaW5nQ29udGV4dCA9IGNvbnRleHQ7CgogICAgICAg
ICAgICAvLyBFbnJlZ2lzdHJlbWVudCBkZXMgbGlzdGVuZXJzIE9wZW5DTVMKICAgICAgICAgICAg
T3BlbkNtcy5hZGRDbXNFdmVudExpc3RlbmVyKHRoaXMpOwoKICAgICAgICAgICAgTE9HLmluZm8o
IkxpYnJhaXJpZSBTcHJpbmcgY2xhc3NpcXVlIGluaXRpYWxpc8OpZSBhdmVjIHN1Y2PDqHMiKTsK
CiAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgTE9HLmVycm9yKCJF
cnJldXIgbG9ycyBkZSBsJ2luaXRpYWxpc2F0aW9uIGRlIGxhIGxpYnJhaXJpZSBTcHJpbmciLCBl
KTsKICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkltcG9zc2libGUgZCdp
bml0aWFsaXNlciBsYSBsaWJyYWlyaWUgU3ByaW5nIiwgZSk7CiAgICAgICAgfQogICAgfQoKICAg
IC8qKgogICAgICogQXJyw6p0IGR1IG1vZHVsZQogICAgICovCiAgICBAT3ZlcnJpZGUKICAgIHB1
YmxpYyB2b2lkIHNodXREb3duKENtc01vZHVsZSBtb2R1bGUpIHsKICAgICAgICBMT0cuaW5mbygi
QXJyw6p0IGRlIGxhIGxpYnJhaXJpZSBTcHJpbmcgY2xhc3NpcXVlIik7CgogICAgICAgIGlmIChz
cHJpbmdDb250ZXh0ICE9IG51bGwpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAg
IGlmIChzcHJpbmdDb250ZXh0IGluc3RhbmNlb2YgQW5ub3RhdGlvbkNvbmZpZ0FwcGxpY2F0aW9u
Q29udGV4dCkgewogICAgICAgICAgICAgICAgICAgICgoQW5ub3RhdGlvbkNvbmZpZ0FwcGxpY2F0
aW9uQ29udGV4dCkgc3ByaW5nQ29udGV4dCkuY2xvc2UoKTsKICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgIExPRy5pbmZvKCJDb250ZXh0ZSBTcHJpbmcgZmVybcOpIGF2ZWMgc3VjY8Oo
cyIpOwogICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAg
TE9HLmVycm9yKCJFcnJldXIgbG9ycyBkZSBsJ2FycsOqdCBkdSBjb250ZXh0ZSBTcHJpbmciLCBl
KTsKICAgICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgICAgIHNwcmluZ0NvbnRleHQg
PSBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogR2Vz
dGlvbiBkZXMgw6l2w6luZW1lbnRzIE9wZW5DTVMKICAgICAqLwogICAgQE92ZXJyaWRlCiAgICBw
dWJsaWMgdm9pZCBjbXNFdmVudChDbXNFdmVudCBldmVudCkgewogICAgICAgIHN3aXRjaCAoZXZl
bnQuZ2V0VHlwZSgpKSB7CiAgICAgICAgICAgIGNhc2UgSV9DbXNFdmVudExpc3RlbmVyLkVWRU5U
X1BVQkxJU0hfUFJPSkVDVDoKICAgICAgICAgICAgICAgIExPRy5kZWJ1Zygiw4l2w6luZW1lbnQg
ZGUgcHVibGljYXRpb24gZMOpdGVjdMOpIik7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgY2FzZSBJX0Ntc0V2ZW50TGlzdGVuZXIuRVZFTlRfQ0xFQVJfQ0FDSEVTOgogICAgICAg
ICAgICAgICAgTE9HLmRlYnVnKCLDiXbDqW5lbWVudCBkZSBuZXR0b3lhZ2UgZGVzIGNhY2hlcyBk
w6l0ZWN0w6kiKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KCiAgICAv
KioKICAgICAqIENvbmZpZ3VyYXRpb24gZGVzIHByb3ByacOpdMOpcyBzeXN0w6htZQogICAgICov
CiAgICBwcml2YXRlIHZvaWQgY29uZmlndXJlU3lzdGVtUHJvcGVydGllcygpIHsKICAgICAgICAv
LyBDb25maWd1cmF0aW9uIGRlIGJhc2UgZGUgZG9ubsOpZXMgKHZhbGV1cnMgcGFyIGTDqWZhdXQp
CiAgICAgICAgaWYgKFN5c3RlbS5nZXRQcm9wZXJ0eSgic3ByaW5nLmRhdGFzb3VyY2UudXJsIikg
PT0gbnVsbCkgewogICAgICAgICAgICBTeXN0ZW0uc2V0UHJvcGVydHkoInNwcmluZy5kYXRhc291
cmNlLnVybCIsICJqZGJjOnBvc3RncmVzcWw6Ly9wb3N0Z3Jlcy1kYjo1NDMyL2xpYmRiIik7CiAg
ICAgICAgfQogICAgICAgIGlmIChTeXN0ZW0uZ2V0UHJvcGVydHkoInNwcmluZy5kYXRhc291cmNl
LnVzZXJuYW1lIikgPT0gbnVsbCkgewogICAgICAgICAgICBTeXN0ZW0uc2V0UHJvcGVydHkoInNw
cmluZy5kYXRhc291cmNlLnVzZXJuYW1lIiwgImFwcHVzZXIiKTsKICAgICAgICB9CiAgICAgICAg
aWYgKFN5c3RlbS5nZXRQcm9wZXJ0eSgic3ByaW5nLmRhdGFzb3VyY2UucGFzc3dvcmQiKSA9PSBu
dWxsKSB7CiAgICAgICAgICAgIFN5c3RlbS5zZXRQcm9wZXJ0eSgic3ByaW5nLmRhdGFzb3VyY2Uu
cGFzc3dvcmQiLCAiYXBwcGFzc3dvcmQiKTsKICAgICAgICB9CgogICAgICAgIExPRy5pbmZvKCJQ
cm9wcmnDqXTDqXMgc3lzdMOobWUgY29uZmlndXLDqWVzIik7CiAgICB9CgogICAgLyoqCiAgICAg
KiBBY2PDqHMgYXV4IGJlYW5zIFNwcmluZwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIDxUPiBU
IGdldEJlYW4oQ2xhc3M8VD4gYmVhbkNsYXNzKSB7CiAgICAgICAgaWYgKHNwcmluZ0NvbnRleHQg
PT0gbnVsbCkgewogICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJM
ZSBjb250ZXh0ZSBTcHJpbmcgbidlc3QgcGFzIGluaXRpYWxpc8OpIik7CiAgICAgICAgfQogICAg
ICAgIHJldHVybiBzcHJpbmdDb250ZXh0LmdldEJlYW4oYmVhbkNsYXNzKTsKICAgIH0KCiAgICBw
dWJsaWMgc3RhdGljIE9iamVjdCBnZXRCZWFuKFN0cmluZyBiZWFuTmFtZSkgewogICAgICAgIGlm
IChzcHJpbmdDb250ZXh0ID09IG51bGwpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxT
dGF0ZUV4Y2VwdGlvbigiTGUgY29udGV4dGUgU3ByaW5nIG4nZXN0IHBhcyBpbml0aWFsaXPDqSIp
OwogICAgICAgIH0KICAgICAgICByZXR1cm4gc3ByaW5nQ29udGV4dC5nZXRCZWFuKGJlYW5OYW1l
KTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNTcHJpbmdDb250ZXh0QXZhaWxh
YmxlKCkgewogICAgICAgIHJldHVybiBzcHJpbmdDb250ZXh0ICE9IG51bGw7CiAgICB9Cn0KCklm
IGkgYnVpbGQgdGhpcyBsaWIgYXMgYSBqYXIgYW5kIHB1dCBpdCBpbiBXRUItSU5GL2xpYiBpIGNh
biBhY2Nlc3MgbXkgYmVhbnMgaW4ganNwIHBhZ2VzIGJ1dCBpIG11c3QgZG8gdGhpcyBjYWxsIGZp
cnN0OgoKICAgICAgICAgICBjb20ub3BlbmNtcy5saWJyYXJ5LmludGVncmF0aW9uLkxpYnJhcnlJ
bml0aWFsaXplciBpbml0aWFsaXplciA9CiAgICAgICAgICAgICAgICBuZXcgY29tLm9wZW5jbXMu
bGlicmFyeS5pbnRlZ3JhdGlvbi5MaWJyYXJ5SW5pdGlhbGl6ZXIoKTsKCiAgICAgICAgICAgIC8v
IEFwcGVsIGRpcmVjdCBkZSBpbml0aWFsaXplIGF2ZWMgZGVzIHBhcmFtw6h0cmVzIG51bGxzIChu
b3RyZSB2ZXJzaW9uIHNpbXBsaWZpw6llIGxlcyBnw6hyZSkKICAgICAgICAgICAgaW5pdGlhbGl6
ZXIuaW5pdGlhbGl6ZShudWxsLCBudWxsLCBudWxsKTsKYWZ0ZXIgdGhhdCBteSBjb250ZXh0IGlz
IGluaXRpYWxpemVkIGFuZCBjb25maWd1cmVkIGFuZCBteSBqc3AgYXJlIHJ1bm5pbmcgZmluZS4g
QnV0IHRoZSB3YXkgdG8gYXV0b21hdGljIGxvYWRpbmcgb2YgbXkgY29udGV4dCBzZWVtcyB0byBi
ZSBhbiBvcGVuY21zIG1vZHVsZS4KCkkgdHJpZWQgdG8gYWRhcHQgbXkgbGliIHdpdGggb3BlbmNt
cy1tb2R1bGUueG1sLCBtYW5pZmVzdC54bWwsLi4uIGJ1dCBub3RoaW5nIHdvcmtzOiBhdCBzdGFy
dHVwIGNvbS5vcGVuY21zLmxpYnJhcnkuaW50ZWdyYXRpb24uTGlicmFyeUluaXRpYWxpemVyIGlz
IG5vdCBmb3VuZCBieSBvcGVuY21zLgoKQ2FuIHlvdSBoZWxwIG1lPwpEb2VzIGl0IGV4aXN0IGEg
dHV0b3JpYWwgb3IgaG93LXRvPwoKQW0gaSB3cm9uZyB3aXRoIHB1YmxpYyBjbGFzcyBMaWJyYXJ5
SW5pdGlhbGl6ZXIgZXh0ZW5kcyBBX0Ntc01vZHVsZUFjdGlvbiBpbXBsZW1lbnRzIElfQ21zRXZl
bnRMaXN0ZW5lciA/CgpUaGFuayB5b3UKCktpbmQgcmVnYXJkcywKCkxhdXJlbnQKCgpfX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpUaGlzIG1haWwgaXMgc2Vu
dCB0byB5b3UgZnJvbSB0aGUgb3BlbmNtcy1kZXYgbWFpbGluZyBsaXN0ClRvIGNoYW5nZSB5b3Vy
IGxpc3Qgb3B0aW9ucywgb3IgdG8gdW5zdWJzY3JpYmUgZnJvbSB0aGUgbGlzdCwgcGxlYXNlIHZp
c2l0Cmh0dHBzOi8vbGlzdHMub3BlbmNtcy5vcmcvbWFpbG1hbi9saXN0aW5mby9vcGVuY21zLWRl
dgoKCgo=