- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个项目,其他项目正在使用它作为 Ivy 依赖项。它的 dependencies.xml
包含很多依赖项,基本上分为 3 类:
第三个依赖类别对我来说很重要。如果我不在 javac
类路径中包含 servlet-api.jar
,我将无法编译该项目。但是,如果我将该包包含在 war 类路径中,我就会陷入一种糟糕的做法,因为服务器运行时(主要是 Tomcat,但也包括 Websphere)包含它们自己的 servlet-api.jar
。
对于 JDBC 连接器,我只需要将它们包含到 Ant 类路径中以从 Bamboo 运行单元测试,因为我想对多个数据库重复相同的测试。
这是我当前的 dependency.xml 片段:
<configurations>
<conf name="test" visibility="public" extends="compile" />
<conf name="compile" visibility="public" extends="runtime" />
<conf name="runtime" visibility="public" />
<conf name="provided" visibility="public" />
<conf name="junit" visibility="public" />
</configurations>
<!-- Build -->
<dependency org="javax.servlet" name="javax.servlet-api" rev="3.0.1" transitive="false" conf="provided->*" />
<dependency org="javax.servlet.jsp" name="javax.servlet.jsp-api" rev="2.3.1" transitive="false" conf="provided->*" />
<dependency org="javax.el" name="javax.el-api" rev="3.0.0" transitive="false" conf="provided->*" />
<dependency org="mysql" name="mysql-connector-java" rev="5.1.38" transitive="false" conf="provided->*" />
<dependency org="ojdbc" name="ojdbc" rev="14" transitive="false" conf="provided->*" />
<dependency org="org.hsqldb" name="hsqldb" rev="2.3.3" transitive="false" conf="provided->*" />
<dependency org="org.postgresql" name="postgresql" rev="9.4.1207" transitive="false" conf="provided->*" />
<dependency org="com.microsoft" name="sqljdbc" rev="4.1" transitive="false" conf="provided->*" />
<dependency org="org.adrianwalker" name="multiline-string" rev="0.1.2" transitive="false" conf="provided->*" />
<!-- Spring -->
<dependency org="org.springframework" name="spring-core" rev="4.2.4.RELEASE" transitive="false" conf="runtime->*"/>
<dependency org="org.springframework" name="spring-aop" rev="4.2.4.RELEASE" transitive="false" conf="runtime->*"/>
<dependency org="org.springframework" name="spring-beans" rev="4.2.4.RELEASE" transitive="false" conf="runtime->*"/>
<dependency org="org.springframework" name="spring-context" rev="4.2.4.RELEASE" transitive="false" conf="runtime->*"/>
<dependency org="org.springframework" name="spring-context-support" rev="4.2.4.RELEASE" transitive="false" conf="runtime->*"/>
<dependency org="org.springframework" name="spring-expression" rev="4.2.4.RELEASE" transitive="false" conf="runtime->*"/>
<dependency org="org.springframework" name="spring-jdbc" rev="4.2.4.RELEASE" transitive="false" conf="runtime->*"/>
<dependency org="org.springframework" name="spring-orm" rev="4.2.4.RELEASE" transitive="false" conf="runtime->*"/>
<dependency org="org.springframework" name="spring-tx" rev="4.2.4.RELEASE" transitive="false" conf="runtime->*"/>
<dependency org="org.springframework" name="spring-web" rev="4.2.4.RELEASE" transitive="false" conf="runtime->*"/>
<dependency org="org.springframework" name="spring-webmvc" rev="4.2.4.RELEASE" transitive="false" conf="runtime->*"/>
<dependency org="org.springframework" name="spring-test" rev="4.2.4.RELEASE" transitive="false" conf="test->*"/>
<dependency org="org.springframework.plugin" name="spring-plugin-core" rev="1.2.0.RELEASE" transitive="false" conf="runtime->*"/>
<dependency org="org.springframework.plugin" name="spring-plugin-metadata" rev="1.2.0.RELEASE" transitive="false" conf="runtime->*"/>
在上面的示例中,com.adrianwalker#multiline-string
仅用于注释解析,不需要其他
在我的 main-project
中,我最终通过以下任务检索依赖项
<target name="ivy-retrieve">
<ivy:configure override="true" file="${ivy.install.dir}/ivy-settings.xml" />
<ivy:retrieve sync="true" conf="runtime,junit" type="jar,bundle" pattern="${project.local.lib}/[artifact]-[revision].[ext]" />
<eclipse.refreshLocal depth="infinite" resource="/" if:set="eclipse.running" />
</target>
这将使用我需要的所有依赖项(包括 spring-test
)正确填充我的 WEB-INF/lib
目录,但没有已手动复制的 JDBC 连接器到 Tomcat 类路径
好的...
当我将 main-project
嵌入到 derived-project
时出现问题
<dependency org="com.example" name="main-project" rev="${current.version}" transitive="true" conf="runtime->*"/>
和
<target name="ivy-retrieve-eclipse">
<ivy:configure override="true" file="${ivy.install.dir}/ivy-settings.xml" />
<ivy:retrieve sync="true" conf="runtime,junit" type="jar,bundle" pattern="${project.local.lib}/[artifact]-[revision].[ext]" />
<eclipse.refreshLocal depth="infinite" resource="/" if:set="eclipse.running" />
</target>
结果是我仍然下载了所有依赖项。
我只需要告诉 Ivy 为我的 derived-project
下载所有 runtime
和 junit
的依赖项,包括那些 runtime
和 junit
依赖项包含在 main-project
的 ivy 文件中。
我该怎么做?我搞砸了什么?
最佳答案
所以我假设您的主要项目将其 jar 发布到存储库中是正确的? (使用发布任务?)。
我认为您的问题是子构建的依赖声明中的配置映射:
<dependency org="com.example" name="main-project" rev="${current.version}" transitive="true" conf="runtime->*"/>
您声明本地构建的“运行时”配置映射到主项目模块中列出的所有配置。这就是你得到所有 jar 的原因:
conf="runtime->*"
修复很简单:
conf="runtime"
这是以下内容的简写:
conf="runtime->runtime"
关于java - 创建适当的 ivy 配置(而不是弄乱 *),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35769251/
我是一名优秀的程序员,十分优秀!