小编Mar*_*ann的帖子

Maven中的.m2文件夹是如何得到它的名字的?

为什么在Maven 3中调用了Maven用户特定的设置文件夹.m2,以及.m2?

我已经阅读了Maven设置参考,我仍然无能为力,我在这里找不到任何类似的问题.我知道M2_HOME取代了Maven 2中的MAVEN_HOME,所以我猜这是原因的一部分.

maven

8
推荐指数
1
解决办法
1419
查看次数

使用Spock测试线程安全性失败

主题

我有一些明确不是线程安全的代码:

public class ExampleLoader
{
    private List<String> strings;

    protected List<String> loadStrings()
    {
        return Arrays.asList("Hello", "World", "Sup");
    }

    public List<String> getStrings()
    {
        if (strings == null)
        {
            strings = loadStrings();
        }

        return strings;
    }
}
Run Code Online (Sandbox Code Playgroud)

getStrings()预期同时访问的多个线程将被strings视为null,因此loadStrings()(这是一个昂贵的操作)被多次触发.

问题

我想让代码线程安全,作为一个好的世界公民,我首先写了一个失败的Spock规范:

def "getStrings is thread safe"() {
    given:
    def loader = Spy(ExampleLoader)
    def threads = (0..<10).collect { new Thread({ loader.getStrings() })}

    when:
    threads.each { it.start() }
    threads.each { it.join() }

    then:
    1 * loader.loadStrings()
}
Run Code Online (Sandbox Code Playgroud)

上面的代码创建并启动每个调用的10个线程 …

java testing multithreading unit-testing spock

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

Maven 配置文件中用于插件配置的嵌套属性

我有一个部署到 WildFly 8.1.0-Final 的 Java EE 7 项目。我使用由 Maven 管理的独立 Wildfly 服务器(即每个 上的干净配置mvn clean)进行测试,并远程使用“普通”服务器。

为了使用 maven-wildfly-plugin (1.0.2.Final) 部署到两台服务器,我配置了两个 Maven 配置文件:wildfly-local,它定义了本地用户名、密码和端口号;和wildfly-remote,它定义了远程用户名、密码和端口号。

但是,远程服务器以域模式运行,而本地服务器则不然。因此,我需要为远程服务器定义一个带有服务器组的域配置,如下所示:

...
<plugin>
  <artifactId>wildfly-maven-plugin</artifactId>

  <configuration>
    <hostname>${wildfly-hostname}</hostname>
    <username>${wildfly-username}</username>
    <password>${wildfly-password}</password>
    <domain>
      <server-groups>
        <server-group>${wildfly-server-group}</server-group>
      </server-groups>
    </domain>
  </configuration>
  ...
</plugin>
...
Run Code Online (Sandbox Code Playgroud)

${wildfly-hostname}并且在配置文件中定义了其他三个属性,并且此配置有效。但是,独立的非“域模式”本地测试服务器根本不允许部署定义了服务器组的应用程序。

我的第一个想法是在远程配置文件中定义一个嵌套属性,如下所示:

<profile>
  <id>wildfly-remote</id>
  <properties>
    ...
    <wildfly-domain>
      <server-groups>
        <server-group>*my server group name*</server-group>
      </server-groups>
    </wildfly-domain>
    ...
    </properties>
</profile>
Run Code Online (Sandbox Code Playgroud)

...以及本地配置文件中的一个简单属性,如下所示:

<profile>
  <id>wildfly-local</id>
  <properties>
    <wildfly-domain/>
  </properties>
</profile>
Run Code Online (Sandbox Code Playgroud)

Maven 不喜欢这样,因为它无法解析需要文本的标签。

有什么方法可以定义嵌套在一个 Maven 配置文件中但平放在另一个配置文件中的“资源”?

java nested-properties maven

6
推荐指数
1
解决办法
1740
查看次数

以编程方式确定Android应用程序是否具有系统级权限

我正在构建一个应用程序,用于收集和显示使用android.app.usage.UsageStatsManager系统服务的详细使用统计信息(科学!).此服务需要系统级权限android.permission.PACKAGE_USAGE_STATS.

用户需要在"设置"下明确授予系统级权限.当应用程序启动时,我想以编程方式确定该应用程序是否已被授予此权限.如果没有,我想显示如下提示:

权限提示

要检查应用是否具有所需权限,我通常会执行以下操作:

if (PackageManager.PERMISSION_DENIED == checkCallingOrSelfPermission("android.permission.PACKAGE_USAGE_STATS")) {
    // display prompt
}

// keep going
Run Code Online (Sandbox Code Playgroud)

提示启动Settings.ACTION_USAGE_ACCESS_SETTINGS意图:

final Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

App明显有许可

但是,即使应用程序已被授予此权限,也会checkCallingOrSelfPermission(String)始终返回PackageManager.PERMISSION_DENIED(也称-1)返回.

有没有一种特殊的方法来检查系统级权限,或者我做错了什么?

permissions android

6
推荐指数
0
解决办法
1343
查看次数