我在Glassfish上部署了一个由Maven管理的Java项目。
我的问题是,如何安全地删除可能是运行时依赖项的maven管理的依赖项?
我使用maven依赖插件来识别遗留项目上未使用的依赖项:
mvn dependency:analyze -DignoreNonCompile=true
输出如下:
[INFO] --- maven-dependency-plugin:2.8:analyze (default-cli) @ MyProject ---
[WARNING] Used undeclared dependencies found:
[WARNING] commons-collections:commons-collections:jar:3.2:compile
[WARNING] commons-beanutils:commons-beanutils:jar:1.7.0:compile
[WARNING] org.apache.cxf:cxf-core:jar:3.1.3:compile
[WARNING] junit:junit:jar:4.11:test
[WARNING] org.springframework:spring-test:jar:4.1.6.RELEASE:test
[WARNING] com.fasterxml.jackson.core:jackson-databind:jar:2.4.3:compile
[WARNING] ca.uhn.hapi:hapi-base:jar:2.2:compile
[WARNING] org.apache.camel:camel-core:jar:2.15.3:compile
[WARNING] Unused declared dependencies found:
[WARNING] org.apache.camel:camel-cxf:jar:2.15.3:compile
[WARNING] org.apache.cxf:cxf-rt-bindings-soap:jar:3.1.3:compile
[WARNING] org.apache.camel:camel-jms:jar:2.15.3:compile
[WARNING] net.sf.saxon:Saxon-HE:jar:9.5.1-5:compile
[WARNING] org.apache.camel:camel-mina2:jar:2.15.3:compile
[WARNING] com.google.code.gson:gson:jar:2.7:compile
[WARNING] org.springframework:spring-jms:jar:4.2.1.RELEASE:compile
[WARNING] org.springframework:spring-web:jar:4.2.1.RELEASE:compile
[WARNING] org.springframework:spring-orm:jar:4.2.1.RELEASE:compile
[WARNING] org.apache.cxf:cxf-rt-frontend-jaxws:jar:3.1.3:compile
[WARNING] org.apache.camel:camel-spring-ws:jar:2.15.3:compile
[WARNING] org.apache.camel:camel-saxon:jar:2.15.3:compile
[WARNING] org.apache.camel:camel-servlet:jar:2.15.3:compile
[WARNING] org.apache.camel:camel-hl7:jar:2.15.3:compile
[WARNING] org.apache.camel:camel-spring:jar:2.15.3:compile
[WARNING] org.apache.camel:camel-ftp:jar:2.15.3:compile
[WARNING] org.apache.camel:camel-velocity:jar:2.15.3:compile
[WARNING] ch.qos.logback:logback-classic:jar:1.1.2:compile
[WARNING] org.apache.cxf:cxf-rt-transports-http:jar:3.1.3:compile
[WARNING] org.apache.camel:camel-ejb:jar:2.15.3:compile
[WARNING] org.slf4j:slf4j-api:jar:1.7.7:compile
我想删除这些“未使用”的依赖项,但我担心应用程序在运行时失败。
我启用的忽略非编译选项promise“忽略运行时/提供/测试/系统范围以进行未使用的依赖项分析”,但据我所知,设置依赖项的范围是开发人员所做的事情(它不会自动发生),所以我不认为我能确定这些“未使用”的依赖实际上不是运行时依赖。
我特别标记这个问题apache-camel
的原因是因为我担心由于Camel DSL,maven依赖插件特别有可能错误地识别“未使用的”Camel依赖项。例如,由如下所示的DSL使用camel-ftp
组件:
from("ftp://foo@myserver?password=secret&ftpClient.dataTimeout=30000").to("bean:foo");
我认为,就Maven而言,这只是一个字符串,因此它可能没有意识到项目对camel ftp组件有真正的依赖性。
我的问题是,如何安全地删除可能是运行时依赖项的依赖项?
Camel动态实例化类并使用接口,而不是Camel ftp之类的具体类。在这种情况下,字节码工具在分析依赖项时没有用处。
解决方案是拥有一套全面的单元测试,涵盖您的愉快路径和错误路径场景,并针对一套精简的已声明Maven依赖项进行测试。
如果您真的想要修剪依赖关系,请考虑取消*Spring组件的使用,并使用蓝图或JavaDSL。Spring组件往往有很多传递依赖关系。
我正在更新一大组遗留java应用程序。当前构建使用ant,其依赖项来自每个项目的lib目录。依赖项是每个项目的一部分,并签入源代码管理。更新的目的是将构建转换为gradle,并使用maven存储库进行依赖关系管理。为了简单起见,遗留构建使用ant构造从其他项目的lib目录复制依赖项,如下所示: 这种方法用于编译和运行时依赖项。虽然这样做有效,但由于包含了许多在运行时不需要的JAR,因此会导致部署工
移除运行时环境依赖 运行时系统 对于大多数语言,他们都使用了运行时系统(Runtime System),这可能导致 main 函数并不是实际执行的第一个函数。 以 Rust 语言为例,一个典型的链接了标准库的 Rust 程序会首先跳转到 C 语言运行时环境中的 crt0(C Runtime Zero)进入 C 语言运行时环境设置 C 程序运行所需要的环境(如创建堆栈或设置寄存器参数等)。 然后 C
我想在我的项目中找到未使用的依赖项。Gradle中有没有类似Maven的功能?
试图遵循O'Reilly的“编程Scala”一书中的示例。下载并安装sbt,使用:brew install sbt@1似乎已成功。然后在命令行输入“sbt”或“sbt-v”(在Mac上bash)后,我会得到: 格伦
当在我的gradle文件中添加依赖项作为实现时,它们在作为运行时配置的一部分列出时不会被包括在内。例如,当试图将它们放入pathing jar时,它们被排除在外,如下所示: 但是,当将这些作为编译依赖项移回时,这是有效的。现在的问题是在编译时,我的类路径要大得多。我的理解是,实现应该被视为直接使用者中的编译时和传递性的运行时,那么为什么它们被排除在配置之外呢?当将它们指定为“API”时,这也不起作
是否有一种方法可以使用Gradle从一组中排除特定的jar?我尝试了下面的代码,但这删除了该组的所有jar