我有一个包含3个项目的Visual Studio解决方案:
Persistence,project C,依赖NHibernate并包含所有存储库接口,Hibernate这些存储库的实现以及映射到数据库表的类.
BusinessModel,project B,依赖于C并包含表示业务域实体的所有服务类和类.这些服务使用存储库来检索数据,然后将这些数据转换为业务表示形式在其自己的接口中.
MyWebSite,project A,依赖于A并包含所有MVC类/文件.这里的MVC控制器使用服务类B来执行任何业务逻辑功能.该级别没有任何知识表明项目B使用项目C的存储库来执行其操作.
在一个完美的世界中,我认为该项目A应该参考B哪些参考C文献NHibernate.这似乎不是真的.我发现该项目A需要参考B 和C和NHibernate!我不喜欢我的Web应用程序需要了解我的后端架构的想法,我特别不希望它意识到我正在使用NHibernate我的ORM 这一事实.
有没有办法告诉这些项目在解析引用时使用传递依赖?
我的项目是Visual Studio 2010中的.NET 4,如果该信息有所不同.
编辑:我找到了这个相关问题的答案,这个问题解释了这些引用只有在项目的项目C浮出水面时才需要B.我一直非常坚定不要在层之间有任何泄漏,我知道Hibernate类只用于C所以也许我只是不理解正确...
我的 POM 包含:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-configuration2</artifactId>
<version>2.3</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
快速入门指南读取属性文件中的两个示例代码:
Configurations configs = new Configurations();
try
{
Configuration config = configs.properties(new File("config.properties"));
// access configuration properties
...
}
catch (ConfigurationException cex)
{
// Something went wrong
}
Run Code Online (Sandbox Code Playgroud)
和属性文件,使用 PropertiesConfiguration:
Parameters params = new Parameters();
FileBasedConfigurationBuilder<FileBasedConfiguration> builder =
new FileBasedConfigurationBuilder<FileBasedConfiguration>(PropertiesConfiguration.class)
.configure(params.properties()
.setFileName("usergui.properties"));
try
{
Configuration config = builder.getConfiguration();
...
}
catch(ConfigurationException cex)
{
// loading of the configuration file failed
}
Run Code Online (Sandbox Code Playgroud)
抛出:
java.lang.NoClassDefFoundError: org/apache/commons/beanutils/DynaBean
...
at org.apache.commons.configuration2.builder.fluent.Parameters.createParametersProxy(Parameters.java:307)
at org.apache.commons.configuration2.builder.fluent.Parameters.fileBased(Parameters.java:186) …Run Code Online (Sandbox Code Playgroud) dependencies pom.xml maven apache-commons-config transitive-dependency
我需要回答这个问题:给定一个依赖图中的节点,通过它们自己的传递依赖对其依赖者进行分组,这些依赖会受特定的起始节点的影响.
换句话说,给定依赖图中的节点,找到直接依赖的集合的集合,其直接依赖于从该特定起始节点导出的公共依赖.
例如,给出伪代码:
let a = 1
let b = 2
let c = a + b
let d = a + b
let e = a
let f = a + e
let g = c + d
Run Code Online (Sandbox Code Playgroud)
你可以计算这个图:
如果我们用作a起始节点,我们可以看到a两者的依赖性,c并且d具有依赖性g.并且f有依赖e和a.
请注意,a根本没有任何影响b,因此在决定如何对依赖者进行分组时不应将其考虑在内a.
使用a作为起始节点,我们想要获得这些分组的依赖集:
groups = {{c, d}, {e, f}}
Run Code Online (Sandbox Code Playgroud)
c并且d具有直接或传递的下游关系,并且e也 …
graph-theory dataflow directed-graph transitive-closure transitive-dependency
基本上,我的Web服务必须可以作为单个OSGi jar包进行部署.因此:
I'm attempting to use the maven-bundle-plugin to accomplish this. I've used Embed-Dependency to get all my compile and runtime dependencies in the bundle, and I've used Embed-Transitive to embed all the transitive dependencies. I then figured out how to use excludeDependencies to exclude Maven dependencies from the BND classpath (they are moved to Private-Package in the Manifest), but for the life of me I can't figure out how to get it to exclude the transitive dependencies. …
我正在将旧样式的 MsBuild csproj 项目迁移为使用 PackageReference 格式,但遇到了传递依赖项的问题。
请考虑以下项目 A 引用 NuGet 包 B 和 C,每个项目都包含一个使用 PackageReference 的程序集。在构建项目 A 上,使用 IL 合并将 B 作为公共符号合并到 A 程序集中,将 C 作为内部化符号合并。项目 D 有一个对 A 的项目引用。
传递依赖情况 D 引用 A、B 和 C。构建 D 时,会发生类型错误 CS0433: 类型 'X' 存在于 'A' 和 'B' 中的编译错误。
在上面的场景中,有没有办法强制 D 不添加对 B 或 C 的显式引用?
msbuild nuget transitive-dependency visual-studio-2017 packagereference
我正在研究一个现有的 Python 3 代码库,它提供了一个,setup.py所以代码被安装为一个 Python 库。我试图让与自己的依赖安装了这个内部库(通常的数据科学的人,例如pandas,pyodbc,sqlalchemy等)。
我希望有这个内部库来处理这些依赖项,并假设如果安装了该库,则假定已安装所有可传递的依赖项。我还想要conda包的 Anaconda ( ) 版本而不是pip版本。
我从 开始requirements.txt,但很快就转移到了这个领域setup.py:
install_requires=[
"pyodbc>=4.0.27",
"sqlalchemy>=1.3.8",
"pandas>=0.25.1",
"requests>=2.22.0",
"assertpy>=0.14",
"cycler>=0.10.0",
]
Run Code Online (Sandbox Code Playgroud)
但是,当我运行安装过程时:
python setup.py install --record installed_files.txtpip install .我看到有一些gcc/ C++ 编译正在进行,显示有关 Python 轮子的日志(我不完全理解 Python 蛋和 Python 轮子的含义,但 AFAIK 如果conda可用,那么我应该使用该conda版本而不是蛋/轮子因为那样我就不必处理 Python 代码下面的 C++ 代码了)。
我真的更喜欢必须conda安装这些包含在一些 Python 代码中的 C++ blob …
"csv-file-validator": "^1.8.0"我正在使用带有 3 个依赖项的包
famulus "2.1.2"
lodash "4.17.15"
papaparse "^5.2.0"
Run Code Online (Sandbox Code Playgroud)
我想更新/强制lodash使用 to be的版本4.17.20。我发现了选择性依赖解析并在我的package.json
"resolutions": {
"csv-file-validator/lodash": "^4.17.20"
}
Run Code Online (Sandbox Code Playgroud)
我删除了yarn.lock,node_modules文件夹并yarn install再次运行。然而lodash版本仍然是4.17.15
csv-file-validator@^1.8.0:
version "1.8.0"
resolved "https://pkgs.dev.azure.com/RCTechnologies/EMA/_packaging/EMA/npm/registry/csv-file-validator/-/csv-file-validator-1.8.0.tgz#f8b879f533ce8c84b115d0ed2eca8e691249ec22"
integrity sha1-+Lh59TPOjISxFdDtLsqOaRJJ7CI=
dependencies:
famulus "2.1.2"
lodash "4.17.15"
papaparse "^5.2.0"
Run Code Online (Sandbox Code Playgroud)
有可能实现这一目标吗?如果是的话,我错过了什么吗?
我正在尝试将特定工件(及其所有依赖项)下载到计算机的本地存储库.
似乎使用依赖:get目标将是最佳选择,但尽管有文档,它似乎并没有实际获得传递依赖.
下面是一个示例,我尝试使用它dependency:get来下载spring-core jar及其所有依赖项.您会注意到Spring-core jar是唯一下载的东西,尽管这是在清理本地存储库之后完成的.
$ mvn org.apache.maven.plugins:maven-dependency-plugin:2.2:get -DrepoUrl=http://repo1.maven.org/maven2/ -Dartifact=org.springframework:spring-core:3.0.5.RELEASE -Dtransitive=true
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-dependency-plugin:2.2:get (default-cli) @ standalone-pom ---
Downloading: http://repo1.maven.org/maven2/org/springframework/spring-core/3.0.5.RELEASE/spring-core-3.0.5.RELEASE.jar
Downloaded: http://repo1.maven.org/maven2/org/springframework/spring-core/3.0.5.RELEASE/spring-core-3.0.5.RELEASE.jar (374 KB at 548.4 KB/sec)
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4.401s
[INFO] Finished at: Wed May 25 00:29:47 CDT 2011
[INFO] Final Memory: 7M/107M
[INFO] ------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
我的问题是:
dependency:get目标的错误吗?我遇到了JIRA帖子,它提供了一个解决方案,在POM的每个依赖项标签中都包含了排除标记.
但是我有大量的项目,每个项目都有大量的依赖标记.<exclusion>在每个依赖标记中包含它是不可行的.
问题:有没有办法全局关闭maven中传递依赖项的导入?
我使用了Apache Maven Shade Plugin来创建胖jar(包含所有依赖项的所有类的jar).我当前的项目文件夹结构看起来像这样,
> Parent Module (packaging pom)
> Module 1 (packaging jar)
> Own classes
> Dependency-1
> Dependency-2
> Module 2 (packaging jar)
> Own classes
> Module 1 (I want here only classes written in module-1, not any transitive dependencies)
> Dependency-1
> Dependency-2
> Dependency-3
Run Code Online (Sandbox Code Playgroud)
pom.xml来自父模块的快照,
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<executions>
<execution>
<id>common-shade</id>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.handlers</resource>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.schemas</resource>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
pom.xml …
dependency-management maven-plugin maven transitive-dependency maven-shade-plugin
maven ×5
.net ×1
bundle ×1
conda ×1
dataflow ×1
dependencies ×1
graph-theory ×1
maven-3 ×1
maven-plugin ×1
msbuild ×1
nuget ×1
osgi ×1
pip ×1
pom.xml ×1
python-3.x ×1
reference ×1
setup.py ×1
yarnpkg ×1