This information needs to be updated to reflect move from Buck to Bazel.

The information on this page is based on the following thread: https://groups.google.com/a/onosproject.org/d/topic/onos-dev/ZkfN8_61EJU/discussion


1. Add a new directory in $ONOS_ROOT/models and put YANG files in it.

ubuntu@miyata ~/onos> find models/yang-sample/ -type f
models/yang-sample/src/main/yang/ietf-yang-types.yang
...(some YANG files)...
models/yang-sample/BUCK
models/yang-sample/pom.xml

ubuntu@miyata ~/onos> cat models/yang-sample/BUCK
yang_model(
    app_name = 'org.onosproject.models.yang-sample',
    title = 'YANG Sample Model',
)


2. Add a new directory in apps directory.  Src directory shouldn't be empty. I added a dummy class in src/main/java here.

ubuntu@miyata ~/onos> find apps/yang-sample/ -type f
apps/yang-sample/src/main/java/org/onosproject/sample/DeviceInfo.java
apps/yang-sample/BUCK

ubuntu@miyata ~/onos> cat apps/yang-sample/BUCK
COMPILE_DEPS = [
    '//lib:CORE_DEPS',
    '//models/yang-sample:onos-models-yang-sample',
    '//lib:onos-yang-model',
]

TEST_DEPS = [
    '//lib:TEST_ADAPTERS',
    '//utils/osgi:onlab-osgi-tests',
]

APPS = [
    'org.onosproject.models.yang-sample',
]

osgi_jar_with_tests(
    deps = COMPILE_DEPS,
    test_deps = TEST_DEPS,
)

onos_app(
    app_name = 'org.onosproject.yang-sample',
    title = 'YANG Sample App',
    category = 'YANG',
    url = 'http://onosproject.org',
    description = 'YANG Sample Application',
    required_apps = APPS,
)



3. Add entries in $ONOS_ROOT/modules.def. The target name will be automatically generated by scripts in $ONOS_ROOT/bucklets/.  '/' in the file path is replaced with '-' and '-oar' is added as suffix. (onos/apps/yang-sample -> onos-apps-yang-sample-oar and onos/models/yang-sample -> onos-models-yang-sample-oar).

ubuntu@miyata ~/onos> git diff
diff --git a/modules.defs b/modules.defs
index df4530a..79183cc 100644
--- a/modules.defs
+++ b/modules.defs
@@ -202,12 +202,14 @@ ONOS_APPS = [
     '//apps/network-troubleshoot:onos-apps-network-troubleshoot-oar',
     '//apps/l3vpn:onos-apps-l3vpn-oar',
     '//apps/openroadm:onos-apps-openroadm-oar',
+    '//apps/yang-sample:onos-apps-yang-sample-oar',
 ]

 MODELS = [
     '//models/huawei:onos-models-huawei-oar',
     '//models/openroadm:onos-models-openroadm-oar',
     '//models/l3vpn:onos-models-l3vpn-oar',
+    '//models/yang-sample:onos-models-yang-sample-oar',
 ]

 APP_JARS = [



4. Use built-in buck to build. When we had some errors in build process in try & error, "./bin/buck clean" often solved the cache problem.

ubuntu@miyata ~/onos> ./bin/buck build onos
[-] PROCESSING BUCK FILES...FINISHED 0.1s 🐇
[-] DOWNLOADING... (0.00 B/S AVG, TOTAL: 0.00 B, 0 Artifacts)
[-] BUILDING...FINISHED 0.4s [100%] (1/1 JOBS, 0 UPDATED, 0 [0.0%] CACHE MISS)

When compiling large YANG files (>1MB), you may need to increase memory used by JVM.

To specify maximum memoru JVM can use during YANG compilation, add memory pool option like -Xmx4g to $ONOS_ROOT/.buckjavaargs.



5. Java codes were generated based on the YANG files.

ubuntu@miyata ~/onos> find buck-out/gen/models/yang-sample/onos-models-yang-sample-yang\#srcs__yang-gen/ -type f
...(some YANG files)...
buck-out/gen/models/yang-sample/onos-models-yang-sample-yang#srcs__yang-gen/org/onosproject/yang/gen/v1/ietfyangtypes/rev20130715/IetfYangTypes.java
buck-out/gen/models/yang-sample/onos-models-yang-sample-yang#srcs__yang-gen/org/onosproject/yang/gen/v1/ietfyangtypes/rev20130715/package-info.java
buck-out/gen/models/yang-sample/onos-models-yang-sample-yang#srcs__yang-gen/org/onosproject/yang/gen/v1/ietfyangtypes/rev20130715/ietfyangtypes/Timestamp.java
buck-out/gen/models/yang-sample/onos-models-yang-sample-yang#srcs__yang-gen/org/onosproject/yang/gen/v1/ietfyangtypes/rev20130715/ietfyangtypes/Gauge64.java
buck-out/gen/models/yang-sample/onos-models-yang-sample-yang#srcs__yang-gen/org/onosproject/yang/gen/v1/ietfyangtypes/rev20130715/ietfyangtypes/YangIdentifier.java