小编Tar*_*rek的帖子

带有Java Server Faces 1.2的Maven Java EE配置标记

我在Eclipse中使用Maven时遇到了一个奇怪的配置问题.虽然我可以构建项目并将其部署到tomcat而没有任何错误,但Marker选项卡仍然显示以下消息:

[-] Maven Java EE Configuration Problem
(x) JavaServer Faces 1.2 can not be installed : One or more constraints have not been satisfied.
(x) JavaServer Faces 1.2 requires Dynamic Web Module 2.5 or newer.
Run Code Online (Sandbox Code Playgroud)

我实际上使用的是动态Web模块2.4,它将成为消息的来源.我需要将其更改为至少2.5才能使用JSF.问题是,我甚至没有使用JSF.

因此,项目的一个依赖项可能需要它.我运行以下命令来查找项目的依赖关系树:

mvn dependency:tree -DoutputFile=<i>/path/to/outputFile/dependencies.txt</i>
Run Code Online (Sandbox Code Playgroud)

而且惊喜!没有提到JSF 1.2.

编辑忘记添加我的电脑设置:

操作系统:Ubuntu 12.10

Eclipse:4.2 SR1

Java:jdk1.5.0_22和jdk1.7

Apache Maven:3.0.4

Maven主页:/ usr/share/maven

m2e:1.3.1.20130219-1424

m2e-wtp:0.17.0.20130212-1821

我的同事都没有遇到这个问题.其中两个使用Windows,两个使用Ubuntu 12.10.其中一个使用Eclipse 4.2,其他使用Eclipse 3.7.显然,这要么与4.2SR1有关,要么与我的项目设置有关.但我无法找到问题所在.

这是我的pom.xml文件:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>edited</groupId>
    <artifactId>edited</artifactId>
    <packaging>war</packaging>
    <version>edited</version>
    <name>edited</name>
    <distributionManagement>
        <repository>
            <id>deployment</id>
            <name>Internal Releases</name>
            <url>http://edited/nexus/content/repositories/releases/</url>
        </repository>
        <snapshotRepository>
            <id>deployment</id> …
Run Code Online (Sandbox Code Playgroud)

eclipse dwm maven m2e

26
推荐指数
4
解决办法
10万
查看次数

如何获得Java源代码的完整调用层次结构?

解释这有点棘手.我有一个A类:

public class A {
    private Integer a1;
    private Integer a2;
    // getters and setters.
}
Run Code Online (Sandbox Code Playgroud)

有一个静态类B返回我的类A:

public static class B {
    public static A getCurrentA() {
        return a;
    }
}
Run Code Online (Sandbox Code Playgroud)

我需要找到B返回的所有A类用法.所以让我们说C级呼叫c.setA(B.getCurrentA()),然后再进一步调用c.getA().getA2();,我想找到所有这些.

在真实场景中,我有217个不同的类调用B.getCurrentA().我不能手动跟踪Eclipse中的所有调用,并找出调用哪些方法.

Eclipse调用层次结构视图仅向我显示所有调用B.getCurrentA().

我怎样才能做到这一点?


编辑

克里斯海耶斯明白我想做什么.为了在不破坏整个系统的情况下重构一些非常糟糕的遗留代码,我需要首先使用Hibernate的投影微调一些查询(系统中的每个映射实体都被急切加载,并且许多实体是相关的,因此一些查询需要很长时间时间取出一切).但首先我需要找到使用哪些属性,以便我不会在某处获得NullPointerException ...

这是我手动做的一个例子:

  1. 使用Eclipse的搜索查找对B.getCurrentA()的所有调用;
  2. 打开找到的第一个方法,让我们说它是下面的方法:

    public class CController {
        C c = new C();
        CFacade facade = new CFacade();
        List<C> Cs = new ArrayList<C>();
    
        public void getAllCs() {
            c.setA(B.getCurrentA()); // found it!
            facade.search(c);
        } …
    Run Code Online (Sandbox Code Playgroud)

java eclipse hierarchy

13
推荐指数
1
解决办法
1万
查看次数

如何从Weblogic中删除不同步,删除的自动部署的应用程序

作为Weblogic的新手,我通过将war文件复制到autodeploy文件夹,按照一些自述文件将应用程序部署到Weblogic.他们自动在Weblogic控制台中显示,到目前为止一切顺利.

后来,我从autodeploy文件夹中删除了一些这些应用程序,期望它们也从"部署"页面中消失.令我惊讶的是,一旦我启动服务器,他们仍然在那里,我也无法删除它们:Weblogic说我需要从autodeploy文件夹中删除战争(!).

当然,我应该先阅读文档,其中说明如下:

自动部署,重新部署和取消部署存档的应用程序

要自动部署已归档的应用程序,请将其归档文件复制到/ autodeploy目录.WebLogic Server自动将应用程序的部署模式设置为阶段模式.

可以在服务器运行时动态重新部署自动部署的部署单元.要动态重新部署,请将新版本的存档文件复制到/ autodeploy目录中的现有文件中.

要取消部署已自动部署的已归档部署单元,请从/ autodeploy目录中删除该应用程序.WebLogic Server会停止应用程序并将其从配置中删除. 注意: 如果在服务器未处于活动状态时从/ autodeploy目录中删除应用程序,则即使服务器再次处于活动状态,WebLogic Server也不会检测到应用程序已被删除.为了防止不同步的域树,BEA建议您仅在服务器处于活动状态时从/ autodeploy目录中删除应用程序.

由于我在服务器关闭时删除了文件,因此它们仍会显示在那里.在这个特定的文档中没有的是如何在它不同步时修复它.

weblogic-10.x

12
推荐指数
1
解决办法
1万
查看次数

如何在shell脚本中显示进度指示器功能?

我想在我的脚本中编写一个进度指示器函数,它循环"请等待"消息,直到完成调用它的任务.

我希望它是一个函数,以便我可以在其他脚本中重用它.

为了实现这一点,函数需要与其他函数松散耦合,即调用它的函数不必知道其内部代码.

这是我到目前为止所拥有的.此函数接收调用者的pid并循环,直到任务完成.

function progress() {
  pid="$1"

  kill -n 0 "${pid}" &> /dev/null && echo -ne "please wait"
  while kill -n 0 "${pid}" &> /dev/null ; do
    echo -n "."
    sleep 1
  done
}
Run Code Online (Sandbox Code Playgroud)

在脚本中使用它时,它可以正常工作,例如:

#imports the shell script with the progress() function
. /path/to/progress.sh

echo "testing"
# $$ returns the pid of the script.
progress $$ &
sleep 5
echo "done"
Run Code Online (Sandbox Code Playgroud)

输出:

$ testing
$ please wait.....
$ done
Run Code Online (Sandbox Code Playgroud)

问题是当我从另一个函数调用它时,因为函数没有pids:

function my_func() {
  progress $$ &
  echo "my …
Run Code Online (Sandbox Code Playgroud)

shell

5
推荐指数
0
解决办法
4005
查看次数

如何在 Spring 中使用自动装配的 bean 创建简单的工厂模式?

我有一个具有 4 个非常相似方法的控制器,在远程服务器上调用 API 以对不同类型的用户执行不同的操作。这些 API 调用之间发生的变化只是端点和一些参数。

因此,这 4 个方法都使用非常相似的代码调用服务:它们从服务器获取令牌、设置参数、返回 API 的响应。由于稍后将添加更多操作,我决定使用工厂方法模式创建一个 ServiceFactory 并在服务上使用模板模式以避免代码重复。

我的问题是,为了让工厂自动装配服务,它需要与它们耦合,我必须对@Autowire每个实现进行耦合。有更好的解决方案吗?

这是我到目前为止的代码:

休息控制器

@RestController
public class ActionController {
  @Autowired
  private SsoService ssoService;

  // this is the factory
  @Autowired
  private ServiceFactory factory;

  @PostMapping("/action")
  public MyResponse performAction(@RequestBody MyRequest request, HttpServletRequest req) {
    // template code (error treatment not included)
    request.setOperator(ssoService.getOperator(req));
    request.setDate(LocalDateTime.now());
    return serviceFactory.getService(request).do();
  }
}
Run Code Online (Sandbox Code Playgroud)

服务工厂

@Component
public class ServiceFactory {

  @Autowired private ActivateUserService activateUserService;
  @Autowired private Action2UserType2Service anotherService;
  //etc

  public MyService getService(request) { …
Run Code Online (Sandbox Code Playgroud)

java spring factory-method

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

如何在Java中模拟静态方法?

我有一个类FileGenerator,我正在为generateFile()应该执行以下操作的方法编写测试:

1)它应该调用静态方法getBlockImpl(FileTypeEnum)BlockAbstractFactory

2)它应该blockList从子类方法填充变量getBlocks()

3)它应该createFileFileHelper传递String参数的最终辅助类调用静态方法

4)它应该调用BlockControllerblockList 中每个的run方法

到目前为止,我有这个空方法:

public class FileGenerator {
    // private fields with Getters and Setters

    public void generateBlocks() {
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在使用JUnit,Mockito来模拟对象,我尝试使用PowerMockito来模拟静态和最终类(Mockito没有这样做).

我的问题是:我的第一个测试(调用方法getBlockList()BlockAbstractFactory)在流逝,即使是在没有实现generateBlocks().我已经实现了静态方法BlockAbstractFactory(返回null,到目前为止),以避免Eclipse语法错误.

如何测试是否在其中调用静态方法fileGerator.generateBlocks()

到目前为止,这是我的测试类:

@RunWith(PowerMockRunner.class)
public class testFileGenerator {
    FileGenerator fileGenerator = new FileGenerator();

    @Test
    public void shouldCallGetBlockList() {
            fileGenerator.setFileType(FileTypeEnum.SPED_FISCAL);

            fileGenerator.generateBlocks();

            PowerMockito.mockStatic(BlockAbstractFactory.class);
            PowerMockito.verifyStatic();
            BlockAbstractFactory.getBlockImpl(fileGenerator.getFileType());
    }
}
Run Code Online (Sandbox Code Playgroud)

java tdd junit mockito powermock

4
推荐指数
1
解决办法
1万
查看次数

Spring Cloud Config无法使用ssh密钥克隆私有bitbucket存储库

我在Linux(arch)上,尝试使用ssh密钥在本教程之后使用私有bitbucket git存储库配置Spring Cloud Config ,但我不断收到错误:

Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception
[Request processing failed; nested exception is java.lang.IllegalStateException: Cannot
clone or checkout repository] with root cause com.jcraft.jsch.JSchException: Auth fail
Run Code Online (Sandbox Code Playgroud)

现在,根据教程,它应该工作:

如果您不使用HTTPS和用户凭据,当您将密钥存储在默认目录(〜/ .ssh)中并且uri指向SSH位置时,SSH也应该开箱即用,例如"git@github.com:配置/云配置".重要的是〜/ .ssh/known_hosts中的所有键都是"ssh-rsa"格式.不支持新的"ecdsa-sha2-nistp256"格式.使用JGit访问存储库,因此您在其上找到的任何文档都应该适用.HTTPS代理设置可以在〜/ .git/config中设置,也可以通过系统属性(-Dhttps.proxyHost和-Dhttps.proxyPort)以与任何其他JVM进程相同的方式设置.

我在〜/ .ssh文件夹中有一个名为bitbucket-rsa的私有ssh密钥,使用该命令创建ssh-keygen -t rsa -b 4096 -C "my-email@provider.com".公钥正确添加到Bitbucket,因为我能够从命令行克隆,拉出和推送存储库.私钥已添加到ssh-agent中,bitbucket.org存在于known_hosts文件中.

这是config-service项目中的bootstrap.yml:

spring:
  application:
    name: config-service
  cloud:
    config:
      server:
        git:
          uri: "git@bitbucket.org:TarekSaid/my-private-repo.git"
server:
  port: 8888
Run Code Online (Sandbox Code Playgroud)

使用带有用户名和密码的https有效,但我仍然更喜欢使用ssh密钥,我该如何使其工作?

java spring bitbucket ssh-keys spring-cloud-config

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

如何在Java中实现动态的责任链?

我对业务逻辑验证有一系列要求:

  1. 验证的每个独立步骤必须分开;
  2. 这些步骤的顺序可以由管理员定义;
  3. 可以禁用步骤.
  4. 每个验证步骤不是用户定义的-即,代码编译.

所以我想到实现一个动态的责任链,它从表中加载步骤顺序和类名,用它们实例化它们Class.forName().但是我不太喜欢将className存储在表中,因为这可能会导致潜在的问题(例如,重构验证器的名称只会破坏代码).这就是我做的:

在此输入图像描述

当然,解决方案必须越灵活,它就越复杂.不过,我想知道是否有办法保证上述要求而不将类名存储在表中?

java dynamic chain-of-responsibility

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