小编Sto*_*ney的帖子

如何使用maven的其他项目中的类?(抛出ClassNotFoundException和NoClassDefFoundError)

我有两个Vaadin项目(我将它们命名为A和B).两者都使用Maven来解析依赖关系并且位于同一个工作区中.我正在使用Eclipse,我正在使用m2e-plugin.我想在项目A中使用一些B类.在Eclipse中我可以在没有错误/警告的情况下实例化它们但是当我尝试运行AI时会得到a ClassNotFoundException和a NoClassDefFoundError由于实例化B类而引起的.

.classA 的文件位于...\workspace\A\target\classes和它们所在的项目B中...\workspace\B\target\classes.我一直试图解决这个问题,但我找不到解决方案.到目前为止我尝试了什么:

  • 配置构建路径 - > Libaries - >添加类文件夹 - > B\target
  • 配置构建路径 - > Libaries - >添加外部类文件夹 - > B\target
  • 配置构建路径 - >项目 - >添加 - > B.

我认为添加项目是必要的,因为当我删除它时,当我尝试使用A中的B类时,Eclipse会给出错误消息

我不知道还能做什么.也许我必须配置我的pom.xml文件,但我不知道我必须在那里做什么.

编辑:在项目B的pom.xml中:

<groupId>de.qufis</groupId>
<artifactId>CentwertApp</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>CentwertApp</name>
Run Code Online (Sandbox Code Playgroud)

在项目A的pom.xml中:

    <dependency>
        <groupId>de.qufis</groupId>
        <artifactId>CentwertApp</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <type>war</type>
        <scope>import</scope>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

我用maven build为项目B做了清理编译.然后我尝试用项目A做同样的事情然后我收到错误消息:找不到工件de.qufis:CentwertApp:war:0.0.1-SNAPSHOT in vaadin-addons(http://maven.vaadin.com/vaadin -addons)

当我正常运行应用程序时,我仍然得到ClassNotFoundException和NoClassDefError.

编辑2:我已经添加了

<scope>compile</scope>
Run Code Online (Sandbox Code Playgroud)

当我运行Maven构建(清理编译)时,我的构建过程的一部分如下所示:

[INFO]建筑物centwertAdmin 0.0.1-SNAPSHOT

[INFO] ----------------------------------------------- -------------------------

[警告] de.qufis的POM:CentwertApp:war:0.0.1-SNAPSHOT丢失,没有相关信息可用

[INFO] ----------------------------------------------- -------------------------

[INFO]建立失败

然后是错误消息:

[错误]无法在项目centwertAdmin上执行目标:无法解决项目de.qufis的依赖关系:centwertAdmin:war:0.0.1-SNAPSHOT:未能在 …

java eclipse maven

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

Keras TimeDistributed 具有不同形状的多个输入

我有一个带有多个输入的预训练模型,这些输入具有不同的形状。所以我可以在具有匹配形状的新输入上调用模型,如下所示:

new_output = model([input_1, input2])
Run Code Online (Sandbox Code Playgroud)

input_1.shape = (400, 200)
input_2.shape = (400, 200, 10)
Run Code Online (Sandbox Code Playgroud)

我想重用该模型以在数据系列上对其进行训练,因此我的新输入将具有以下形状:

input_1.shape = (100, 400, 200)
input_2.shape = (100, 400, 200, 10)
Run Code Online (Sandbox Code Playgroud)

为了重用模型,我想像这样使用TimeDistributedKeras 中的层:

output = TimeDistributed(model)([input_1, input_2])
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为TimeDistributed不接受列表作为输入。到目前为止,我发现的所有解决方法都是使用合并输入来解决这个问题,但这个解决方案在我的情况下不起作用,因为输入形状不同。

我也尝试使用这样的一些Lambda层:

lambda_0 = Lambda(lambda x: x)
lambda_1 = Lambda(lambda x: [TimeDistributed(lambda_0)(x[0]), TimeDistributed(lambda_0)(x[1])])([input_1, input_2])
output = model(lambda_1)
Run Code Online (Sandbox Code Playgroud)

但这不起作用,因为它只在模型TimeDistributed上使用lambda_0而不是在模型上使用。也许有一个带有Lambda包装器的解决方案可以解决这个问题,或者我必须定义一个自定义的 Keras 层,但目前我遇到了这个问题,所以我很感激任何帮助。

python machine-learning time-series keras tensorflow

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