小编Kev*_*ede的帖子

Maven:编译OK,包OK,编译+包失败

我有一个使用Dagger2并使用Maven构建的桌面Java项目.我不能运行compilepackage顺序.这有效:

$ mvn clean
$ mvn compile
Run Code Online (Sandbox Code Playgroud)

这是有效的,生成一个可以运行而没有错误的可执行jar:

$ mvn clean
$ mvn package
Run Code Online (Sandbox Code Playgroud)

但这失败了:

$ mvn clean
$ mvn compile
$ mvn package
Run Code Online (Sandbox Code Playgroud)

package到达使用Dagger2的模块时,它输出:

[INFO] Changes detected - recompiling the module!
Run Code Online (Sandbox Code Playgroud)

错误来自mvn -e package:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.3:compile (default-compile) on project weapon: Compilation failure -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.3:compile (default-compile) on project weapon: Compilation failure
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:213)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59) …
Run Code Online (Sandbox Code Playgroud)

maven dagger-2

7
推荐指数
1
解决办法
1969
查看次数

Observable优于Flowable的实际优势是什么?

2.0中的不同之处描述了Observable和之间的区别Flowable.然而,Observable主要是根据与之相比缺乏的特征来描述Flowable.Observable提到的只有一个显着特征:

使用Observable通常比开销更低Flowable.

但即便如此,这似乎与Observable少数元素更有利的建议相矛盾,并且更有可能导致OutOfMemoryError过于严重的任务.这似乎表明Flowable通常更有效率.

另一件令我困惑的事情是,如果Observable对于少于1K元素Flowable的用例是优选的,并且对于具有超过10K元素的用例是优选的,则具有1K和10K元素之间的用例是灰色区域.

是否有更多技术解释ObservableFlowable?之间的差异? 特别是提出了一种实用的启发式方法,用于决定在1K和10K元素之间的灰色区域中使用哪种方法,或者当元素的数量未知或可能改变时.

相关:此问答仅引用文档而无需进一步说明.

rx-java rx-java2

7
推荐指数
1
解决办法
557
查看次数

如何强制Android Studio使用相对路径?

在Android Studio 1.0.2中创建的每个项目都包含几个引用项目自己的绝对路径的文件. 如果我愿意,我甚至无法移动自己的项目目录,更不用说与其他开发人员共享项目了.

排除文件app/build,这些是包含绝对路径的文件:

.idea/workspace.xml
.idea/modules.xml
.idea/libraries/support_v4_21_0_3.xml
.idea/libraries/appcompat_v7_21_0_3.xml
.idea/gradle.xml
.gradle/2.2.1/taskArtifacts/taskArtifacts.bin
.gradle/2.2.1/taskArtifacts/fileSnapshots.bin
app/app.iml
Run Code Online (Sandbox Code Playgroud)

如何强制Android Studio为所有内容使用相对路径?

编辑:通过试验香草IDEA,我已经将这些绝对路径的起源缩小到特定类型的模块,Android Studio显然总是使用它而不为您提供选择.但我仍然不了解如何根除它们.

在IDEA 14.0.2中,如果使用"应用程序模块"创建空项目或Android项目,则项目不包含任何绝对路径.如果您使用"Gradle:Android模块"创建项目,则它包含与Android Studio项目相同的文件中的绝对路径.

编辑#2:创建IDEA-134587

android intellij-idea android-studio

5
推荐指数
2
解决办法
7398
查看次数

用于 Cordova 插件回调的线程是什么?

应该在哪个线程中CallbackContext调用的方法?

的文档CordovaPlugin#execute(...)说它是在 WebView 线程中调用的。这和 UI 线程一样吗?如果是这样,那么这可能就是我的答案。

如果 WebView 线程不是 UI 线程,而我应该在 WebView 线程中回调,是否可以异步执行此操作?

android cordova cordova-plugins

5
推荐指数
1
解决办法
5803
查看次数

使用 Runtime.exec(...) 运行 dpm

这个答案表明 Android 应用程序可以dpm像这样运行:

Runtime.getRuntime().exec("dpm set-device-owner com.test.my_device_owner_app");
Run Code Online (Sandbox Code Playgroud)

在我运行 5.1.1 的 Nexus 4 上,此问题会默默失败。shell 返回错误代码 0(成功)并且没有控制台输出。尽管取得了明显的成功,但我的应用程序并未成为设备所有者。该设备刚刚恢复出厂设置,未配置用户帐户。

作为对照,我尝试运行垃圾命令而不是dpm. 正如预期的那样,它失败了。

这曾经有效吗?是故意削弱的吗?

android kiosk-mode android-5.1.1-lollipop

5
推荐指数
1
解决办法
4216
查看次数

如何格式化地址以进行多行显示?

与2011年的这个问题相似,缺乏令人满意的答案:

我正在开发的应用程序将在国际上部署.应用程序本身只关心一个纬度/长度Address,但它需要以Address多行格式显示给用户.谷歌的地理编码器提供了格式化的地址,但它是用逗号分隔的一行.将其拆分为行将需要了解如何在给定国家/地区格式化多行地址.例如,在美国,习惯上将城市和州放在同一条线上,用逗号分隔.

是否有内置方法(或第三方库或Web服务)将格式化多行地址Address,考虑到反向地理编码的地址可能不完整?

android street-address

5
推荐指数
1
解决办法
829
查看次数

Dagger 2 依赖项可以是不可注入的吗?

有没有办法告诉 Dagger 2 如何提供某些东西,但不允许它被注入?

假设我想注入一个Qux. AQux需要 aFoo和 a Bar

@Provides
@Singleton
Foo foo() {
    return new Foo();
}

@Provides
@Singleton
Bar bar() {
    return new Bar();
}

@Provides
@Singleton
Qux qux(final Foo foo, final Bar bar) {
    return new Qux(foo, bar);
}
Run Code Online (Sandbox Code Playgroud)

但如果我不想注射怎么FooBar?也许暴露它们会破坏 的封装,或者它们可能是我只想访问的Qux某种工厂。Qux

我想到了几种可以实现这一目标的方法:

  • 如果Foo其他提供者需要该单例,我可以将其设为类成员。Foo但如果它自己有几个依赖项,这会变得混乱。
  • 如果Bar任何其他提供程序不需要该单例,我可以在Qux提供程序内创建实例。但如果Qux有多个这样的依赖项,这会变得混乱。

这些解决方案看起来都不是非常优雅或危险。还有别的办法吗?

dagger-2

5
推荐指数
1
解决办法
253
查看次数

如何去除NavigationView下方的阴影?

如果 a 的高度NavigationView小于其父级的高度,则在 a 下方有一个阴影NavigationView. 我怎样才能消除那个阴影?

这是我的布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="left"
        android:orientation="vertical"
        android:background="@android:color/white">

    <android.support.design.widget.NavigationView
            android:id="@+id/map_type_menu"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="left"
            app:menu="@menu/menu_map_type"/>

    <!-- unwanted drop shadow here -->

    <fragment
            android:id="@+id/settings"
            android:name="com.chalcodes.treasuremap.SettingsFragment"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

我认为这无关紧要,但这是menu_map_typeXML:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <group android:checkableBehavior="single">
        <item
                android:id="@+id/item_street"
                android:icon="@drawable/ic_menu_map_type_street"
                android:title="@string/map_type_street" />
        <item
                android:id="@+id/item_satellite"
                android:icon="@drawable/ic_menu_map_type_satellite"
                android:title="@string/map_type_satellite" />
        <item
                android:id="@+id/item_hybrid"
                android:icon="@drawable/ic_menu_map_type_satellite"
                android:title="@string/map_type_hybrid" />

        <item
                android:id="@+id/item_terrain"
                android:icon="@drawable/ic_menu_map_type_terrain"
                android:title="@string/map_type_terrain" />
    </group>

</menu>
Run Code Online (Sandbox Code Playgroud)

android android-layout

3
推荐指数
1
解决办法
2254
查看次数

通常使用Reactive Streams Processor作为事件总线是否可以?

我开始学习反应流,因为我很好奇使用RxJava作为更传统事件总线的替代品的新趋势. 这篇博文是对其完成方式的典型描述.如果我理解正确,RxJava 1.x并不是Reactive Streams的严格实现,但它非常相似.2.0版包含一些符合要求的类,或至少通过TCK,因此该代码的更新版本可能看起来有点不同.

public class UserLocationModel {

  private PublishSubject<LatLng> subject = PublishSubject.create();

  public void setLocation(LatLng latLng) {
    subject.onNext(latLng);
  }

  public Observable<LatLng> getUserLocation() {
    return subject;
  }
}
Run Code Online (Sandbox Code Playgroud)

在Reactive Streams术语中,我认为subject是a Processor,它既是a Publisher又是a Subscriber.

问题是,呼吁onNextSubscriber未订购任何东西,似乎违反了无流规范,特别是排除1.9.

这仅仅是一个实现细节吗? 我是否正确地认为您通常不能依赖此协议来实现兼容的Reactive Streams实施?

event-bus rx-java reactive-streams

3
推荐指数
1
解决办法
236
查看次数

嵌入式Neo4j需要哪些罐子?

我正在寻找这个问题的最新答案.以前,最小的Neo4j"Hello World"应用程序需要两个罐子.现在它显然需要一些其他罐子,但我不知道哪些罐子.

如果我按照其他问题的建议包含neo4j-kernel-2.1.2和geronimo-jta_1.1_spec-1.1.1,我会收到此错误:

java.lang.ClassNotFoundException: org.neo4j.collection.primitive.PrimitiveLongIterator
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
Run Code Online (Sandbox Code Playgroud)

如果我添加neo4j-primitive-collections-2.1.2,那么我会因为这个根本原因而出错:

Caused by: java.lang.IllegalArgumentException: No schema index provider org.neo4j.kernel.api.index.SchemaIndexProvider found.
Run Code Online (Sandbox Code Playgroud)

关于这个问题的答案表明我需要neo4j-lucene-index.当我添加该jar时,我收到此错误:

Caused by: java.lang.ClassNotFoundException: org.apache.lucene.store.Directory
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
Run Code Online (Sandbox Code Playgroud)

最后,当我添加lucene-core时,我收到此错误:

Caused by: java.lang.ClassNotFoundException: org.apache.lucene.document.Fieldable
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
Run Code Online (Sandbox Code Playgroud)

我需要添加什么才能超越它?

java lucene neo4j

2
推荐指数
1
解决办法
2785
查看次数

套接字超时21000毫秒来自哪里?

问题

我正在维护的应用程序在大约21000毫秒后继续获得套接字超时,尽管事实上我已经明确设置了更长的超时.这个看似神奇的21000毫秒的价值已经出现在其他一些SO问题和答案中,我正试图找出它究竟来自哪里.

这是我的代码的本质:

HttpURLConnection connection = null;
try {
URL url = new URL(urlString);
    connection = (HttpURLConnection) url.openConnection();
    connection.setConnectTimeout(45000);
    connection.setReadTimeout(90000);
    int responseCode = connection.getResponseCode();
    if (responseCode == 200) {
        // code omitted
    }       
} catch (Exception e) {
    // code omitted
}
finally {
    if (connection != null) {
        connection.disconnect();
    }
}
Run Code Online (Sandbox Code Playgroud)

在一个块中捕获所有异常无疑是不理想的,但它是继承的代码,我不愿意弄乱它.我知道它SocketTimeoutException在21000毫秒后捕获,因为它记录了异常类的简单名称.

线索

我发现了一个问题,即提问者ConnectTimeout在21000毫秒后获得了一个问题,尽管明确地将其设置为40000毫秒.尽管异常类不同,但这很有趣.

我还发现了一个解释不佳的答案,声称服务器端负责21000毫秒的超时.

我的预感

我不认为服务器的任何操作或不作为都可能导致客户端上的套接字超时短于预期.但也许Windows和Android中的TCP堆栈共享一个共同的祖先,或者至少使用类似的连接重试逻辑.

难道Android会将最大连接超时设置为21000毫秒,设置更长的超时时间HttpURLConnection是徒劳的吗?或者这个超时是否可以由移动设备和服务器之间的路径上的某台Windows机器触发?有些Android版本会抛出SocketTimeoutException别人扔的地方ConnectException吗?

sockets android httpurlconnection

2
推荐指数
1
解决办法
1262
查看次数

IntelliJ IDEA平面包视图

在IDEA 15中,是否可以在平面列表而不是树中显示Java包?像这样:

com.example
com.example.foo
com.example.bar
Run Code Online (Sandbox Code Playgroud)

不是这个:

com.example
    foo
    bar
Run Code Online (Sandbox Code Playgroud)

intellij-idea

2
推荐指数
1
解决办法
2451
查看次数

如果'ℤ'在BMP中,为什么不用2字节编码?

我的问题来自于这个答案,其中说:

由于'ℤ'(0x2124)在基本多语言平面中,因此它由单个代码单元表示.

如果这是正确的,那为什么是"?".getBytes(StandardCharsets.UTF_8).length == 3"?".getBytes(StandardCharsets.UTF_16).length == 4

java unicode

2
推荐指数
1
解决办法
125
查看次数