我目前正在将我们的一个项目从maven转换为Gradle.文件夹结构如下:
gitRoot
settings.gradle
build.gradle
ProjectA
build.gradle
src/main/java
Libraries
SomeLib (git submodule)
ProjectBRoot (git submodule)
settings.gradle
build.gradle
ProjectB
build.gradle
src/main/java
Libraries
FacebookSDK/facebook
build.gradle
src
Run Code Online (Sandbox Code Playgroud)
所以看起来已经很复杂了.但是这个想法是ProjectB是一个图书馆项目,它应该能够单独构建和打包,这就是为什么它有自己的settings.gradle,据我所知它似乎工作正常,我有它建设并且它发现facebook就好了.
ProjectB/build.gradle包含此行
compile project(':libraries:facebook-android-sdk:facebook')
Run Code Online (Sandbox Code Playgroud)
ProjectBRoot/settings.gradle包含此行
include ':ProjectB', ':libraries:facebook-android-sdk:facebook'
Run Code Online (Sandbox Code Playgroud)
gitRoot/settings.gradle包含此行
include ':ProjectA', ':Libraries:ProjectBRoot:ProjectB'
Run Code Online (Sandbox Code Playgroud)
ProjectA/build.gradle包含此行
compile project(':Libraries:ProjectBRoot:ProjectB')
Run Code Online (Sandbox Code Playgroud)
当我运行构建时,我收到此错误
The TaskContainer.add() method has been deprecated and is scheduled to be removed in Gradle 2.0. Please use the create() method instead.
FAILURE: Build failed with an exception.
* Where:
Build file '/gitRoot/Libraries/ProjectBRoot/ProjectB/build.gradle' line: 17
* What went wrong:
A problem occurred …Run Code Online (Sandbox Code Playgroud) 我有一个奇怪的同步架构,我正在寻找一个优雅的解决方案.我已经有了一个解决方案,但我不能说它的有效性,也有点难看.所以这是问题,希望有人可以帮助我.
有两组任务可以启动和运行.每个任务都有自己的线程.这两个组都从一个负责同步部分的超类扩展.为简单起见,我将这两个组称为A组和B组.
条件:
如果只有B组任务在运行,那么它们可以同时运行,并且它们不会相互干扰.
如果启动了组A任务*,则组B任务的构造函数应该失败并出现异常.即使A组任务已在运行,也可以创建任意数量的A组任务
在所有当前的B组任务完成之前,A组任务无法执行.(*从上面)
一次只能运行1个A组任务.他们必须排队.(只要先前的条件仍然适用,可以选择在运行两个A组任务之间阻止B组任务)
我相信我的方法有效但我不喜欢它的工作方式,因为它使用了许多不同的同步点,以及我在等待计数器时有一个睡眠的事实.无论如何,代码如下
public abstract class LockableTask<Params> extends AsyncTask {
private final boolean groupA;
private static Boolean locked = false;
private static final Semaphore semLock = new Semaphore(1);
private static int count = 0;
public LockableTask(boolean groupA) {
this.groupA = groupA;
synchronized (locked) {
if (locked && !groupA) {
throw new InputException("We are locked, please wait");
}
}
}
@Override
protected final AsyncReturn doInBackground(Params... params) {
if (!groupA) {
synchronized (locked) {
count++;
}
} …Run Code Online (Sandbox Code Playgroud)