项目中可能有两个Java共享代码模块?
我必须使用摇篮J2ObjC插件建议SharedCode
,Android
和iOS
项目结构...其中SharedCode
类等由Android
和iOS
模块的主要应用程序代码访问。这工作正常。项目中可能有两个Java共享代码模块?
我希望做的是添加一个名为SharedCodeTestContracts
第四模块,这对SharedCode
的依赖,其类等是由Android
和iOS
模块的测试代码访问,而不是主要应用程序代码,如下所示:
问题:是这样的可能与J2ObjC摇篮插件?我可以有两个由J2ObjC翻译的模块...其中一个链接到iOS 主要的应用程序目标,另一个包含JUnit测试并链接到iOS 测试目标只?
上下文的有关为什么位:偶尔我定义SharedCode
模块要被在Android
和iOS
模块分开实现中的接口。为了避免两次编写相同的测试(每个平台一次),我想将测试放在可由每个模块访问的共享位置。
感谢@ advayDev1指引我在正确的方向。
该溶液是声明build.gradle
文件SharedCode
模块的如下:
plugins {
id 'java'
id 'com.github.j2objccontrib.j2objcgradle' version '0.6.0-alpha'
}
dependencies {
compile 'com.google.guava:guava:18.0'
testCompile 'junit:junit:4.12'
testCompile 'org.hamcrest:hamcrest-core:1.3'
}
j2objcConfig {
autoConfigureDeps true
minVersionIos '8.4'
xcodeProjectDir '../iOS'
xcodeTargetsIos 'MySDK', 'MySDKTests'
finalConfigure()
}
而且如下申报build.gradle
文件TestContracts
模块:基于上述
plugins {
id 'java'
id 'com.github.j2objccontrib.j2objcgradle' version '0.6.0-alpha'
}
dependencies {
compile project(':SharedCode')
compile 'junit:junit:4.12' // this is compile scope deliberately
compile 'org.hamcrest:hamcrest-core:1.3' // this is compile scope deliberately
}
j2objcConfig {
autoConfigureDeps true
minVersionIos '8.4'
xcodeProjectDir '../iOS'
xcodeTargetsIos 'MySDKTests'
finalConfigure()
}
,在构建您的项目时,您应该期望您的Podfile
的内容如下:
target 'MySDK' do
platform :ios, '8.4'
j2objc_SharedCode
import_other_pods
end
target 'MySDKTests' do
platform :ios, '8.4'
j2objc_TestContracts
j2objc_SharedCode
import_other_pods
end
J2ObjC Gradle插件中存在一个错误,它不会产生预期的Podfile
输出,但请参阅here了解更多。
这是一个起点。
我假设你已经有SharedCode/build.gradle在这一点上工作。
在Android /的build.gradle:
dependencies {
compile project(':SharedCode')
testCompile project(':SharedCodeTestContracts')
}
应用J2objC摇篮插件SharedCodeTestContracts /的build.gradle,并且确保您指定的共享代码j2objcLinkage依赖性:
dependencies {
compile project(':SharedCode')
j2objcLinkage project(':SharedCode')
}
假设1:您的Ios模块是纯Xcode ObjC/Swift项目(不是使用j2objc编译的Java Gradle项目)。如果你的Ios模块是一个Java Gradle项目,这仍然是可能的,但是具有不同的过程。关于您可以使用的各种依赖性指令,请阅读https://github.com/j2objc-contrib/j2objc-gradle/blob/master/dependencies.md#dependency-configurations。就像Gradle Java有'compile'和'testCompile'一样,J2objc-Gradle在它的依赖指令上有'测试'变体。
假设2:箭头从A到B意味着B依赖于您的图纸中的A.另外,当你说A链接到B时,你的意思是B在A中链接。我正在澄清,因为这两者通常都是相反的。
当您构建所有Gradle项目时,您将获得2个J2ObjC静态库,一个用于SharedCode,一个用于SharedCodeTestContracts。在您的iOS Xcode项目中,将应用程序目标链接到SharedCode .a文件,并将测试目标链接到SharedCode和SharedCodeTestContracts。
感谢您对此回复@ advayDev1。如果我遇到任何麻烦,我会在本周尝试一下,我会告诉你。 –
嘿@ advayDev1,我尝试了你的建议,但我没有看到我期望的'Podfile'中的输出。在这里写下评论太长了,所以我把它作为一个问题添加在这里:[将输出混淆到具有两个Java模块的项目的Podfile](https://github.com/j2objc-contrib/j2objc -gradle/issues/599)当你有时间的时候请看一看,如果你能发现我做错的事情,请告诉我。非常感谢。 –