C Model和编译器的关系

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C Model和编译器的关系相关的知识,希望对你有一定的参考价值。

参考技术A CModel和编译器的关系是是用来翻译CModel的。编译器就是将“一种语言(通常为高级语言)”翻译为“另一种语言(通常为低级语言)”的程序。C-Model是C语言数字编程模型。

android 创建Model 解决无法依赖传递问题 , 实现 sdk 依赖关系的传递

介绍

我现在创建了一个应用A, 一个库工程 B , B 远程依赖了库工程C ,A远程依赖B工程. B 是通过Maven 发布成远程依赖库. B 作为一个通用的库工程,发布到了Maven上,就可以比较简单的被各个项目引入.

如下图:

问题

目前存在一个问题, 当A使用B中的代码,B使用到了C中的代码,提示C中的代码找不到. 运行就崩溃.

分析

存在这个问题,说明把B上传到Maven上的时候,没有把C的依赖传递下去,导致A使用B, B调用C 导致类找不到 崩溃.

解决

需要把依赖传递下去.

目前我采用的是我之前发的

android studio使用 maven push 插件上传私有maven - 已成功使用到项目中

里面的脚本文件 .
单个库工程是没有问题的, 但是遇到现在这种远程的,存在依赖传递的时候就有问题了, 需要改一下上传maven库的脚本.

afterEvaluate // components.release 只有在配置完成之后,才能拿到值
        publishing 
            publications 
                
                Production(MavenPublication) 
                    // 使用方引用 implementation 'com.sinochem.apm:1.0.0-SNAPSHOT'
                    groupId = "自己定义的groupId"
                    artifactId = "自己定义的artifactId"
                    version = "自己定义的versionName"
                    // 必须有这个 否则不会上传AAR包
                    afterEvaluate  artifact(tasks.getByName("bundleReleaseAar")) 
                    // 上传source,这样使用方可以看到方法注释
                    artifact generateSourcesJar

                
                    // pom文件中声明依赖,从而传递到使用方
                    pom.withXml 
                        def dependenciesNode = asNode().appendNode('dependencies')
                        configurations.implementation.allDependencies.each 
                            // 避免出现空节点或 artifactId=unspecified 的节点
                            if (it.group != null && (it.name != null && "unspecified" != it.name) && it.version != null) 
                                println it.toString()
                                def dependencyNode = dependenciesNode.appendNode('dependency')
                                dependencyNode.appendNode('groupId', it.group)
                                dependencyNode.appendNode('artifactId', it.name)
                                dependencyNode.appendNode('version', it.version)
                                dependencyNode.appendNode('scope', 'implementation')
//                                dependencyNode.appendNode('scope', 'implementation')
                            
                        
                    
                
            
            repositories 
                // 定义一个 maven 仓库
                maven 
                    // 可以有且仅有一个仓库不指定 name 属性,会隐式设置为 Maven
                    // 根据 versionName 来判断仓库地址
                    url = versionName.endsWith('SNAPSHOT') ? SNAPSHOT_REPOSITORY_URL : RELEASE_REPOSITORY_URL
                    // 仓库用户名密码
                    credentials 
                        username = maven_local_username
                        password = maven_local_psw
                    
                


            
        

    

其他使用maven-publish 插件的问题 参考

android studio使用 maven push 插件上传私有maven - 已成功使用到项目中

打完收工. 解决问题.

以上是关于C Model和编译器的关系的主要内容,如果未能解决你的问题,请参考以下文章

不懂,关于c语言和操作系统的关系

gcc与codelite与mingw三者是啥关系。。想学C语言。。看到有人推荐新手用gcc。下载

1.C与C++的关系

解释器和编译器有什么区别和关系?

mingw和gcc的关系?mingw具有gcc的全部核心编译功能吗

GCC,gcc,g++关系