This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
mvn clean package # build target/direct-project-tools-<version>.tar.gz
mvn clean deploy # publish to Maven Central (org.nhind release site)
There is no test suite, no lint step, and no application code to run here — see below.
This is a packaging-only Maven project (<packaging>pom</packaging>). It contains no Java source. Every tool's actual implementation lives in the upstream released org.nhind component libraries:
| Tool launcher | Main class | Comes from |
|---|---|---|
certGen |
org.nhindirect.stagent.cert.tools.certgen.DirectProjectCertGenerator |
agent |
dnsCertDumper |
org.nhindirect.stagent.cert.tools.DNSCertDumper |
agent |
ldapCertDumper |
org.nhindirect.stagent.cert.tools.LDAPCertDumper |
agent |
createPKCS12 |
org.nhindirect.stagent.cert.tools.CreatePKCS12 |
agent |
stripP12Pass |
org.nhindirect.stagent.cert.tools.StripP12Passphrase |
agent |
policyBuilder |
org.nhindirect.policy.tools.policybuild.SimpleTextPolicyBuilder |
direct-policy |
keyStoreMgr |
org.nhindirect.common.crypto.tools.PKCS11SecretKeyManager |
direct-common |
configManager |
(Spring Boot fat jar, java -jar) |
config-manager |
To change tool behavior you must change the upstream library and release a new version, then bump the coordinate here.
mvn package runs three plugins in the package phase:
- maven-dependency-plugin /
copy-tool-dependencies(copy-dependenciesgoal) — copies the runtime dependency trees ofagent,direct-policy, anddirect-commonintotarget/tools/lib/. It carries a large<excludeGroupIds>list:direct-commonpulls a Spring WebFlux/Netty/Feign stack for its config-service REST client that none of these CLI tools use, so those trees are pruned to keeptools/liblean. If a tool ever needs a runtime dependency whose groupId is on that exclude list, it will silently be missing from the distribution — the list must be kept in sync with what the tools actually load. - maven-dependency-plugin /
copy-config-manager(copygoal) — fetches the singleorg.nhind:config-managerjar by exact coordinates and renames it toconfig-manager.jar. It is handled separately, not as a<dependency>, because it is a self-contained executable Spring Boot fat jar launched withjava -jar(which ignores-classpath); adding it as a normal dependency would resolve its entire transitive compile tree into the reactor and splat redundant/conflicting loose jars intotools/lib. The launcher hard-codes theconfig-manager.jarfilename. - maven-assembly-plugin with
src/descriptors/distribution.xml— bundlestarget/tools/(the libs) plus eachsrc/tools/*.sh/*.batlauncher into the finaltar.gz.
Two runtime models in the shipped distribution: the classpath tools run java -classpath .:./lib/* <MainClass>; configManager runs java -jar ./lib/config-manager.jar.
- Add
src/tools/<name>.shandsrc/tools/<name>.bat(mirror an existing pair). - Add both files to the
<files>list insrc/descriptors/distribution.xml(the.shentry needs<fileMode>777</fileMode>). - If it introduces a new upstream library, add a
<dependency>inpom.xmland verify no needed runtime groupId is caught by theexcludeGroupIdslist.
The 9.0.0 component versions and the project <version> are maintained by hand in pom.xml (including the copy-config-manager <artifactItem> version). The parent is spring-boot-dependencies for dependency and plugin version management.