这是我的第一个部署maven项目。我是基于Netty和myBatis开发的
编辑:
这是在src目录树下。
├─main
│ ├─java
│ │ └─kr
│ │ └─stocktalk
│ │ ├─chat
│ │ │ ├─bean
│ │ │ ├─client
│ │ │ ├─codec
│ │ │ ├─common
│ │ │ └─lib
│ │ ├─cloudmessage
│ │ ├─db
│ │ │ ├─clients
│ │ │ └─dynamo
│ │ │ └─mappers
│ │ ├─handler
│ │ │ ├─chat
│ │ │ └─page
│ │ └─mybatis
│ │ ├─bean
│ │ ├─mapper
│ │ └─sql
│ └─resources
│ ├─error
│ ├─html
│ │ └─test
│ ├─mybatis
│ │ └─sql
│ └─snippet
└─test
├─java
└─resources这是我的target目录mvn compile的结果
pom.xml
targets
├─classes
│ └─kr
│ └─stocktalk
│ ├─chat
│ │ ├─bean
│ │ ├─client
│ │ ├─codec
│ │ ├─common
│ │ ├─handler
│ │ └─lib
│ ├─cloudmessage
│ ├─db
│ │ ├─clients
│ │ └─dynamo
│ │ └─mappers
│ ├─handler
│ │ └─page
│ └─mybatis
│ ├─bean
│ ├─mapper
│ └─sql
├─generated-sources
│ └─annotations
├─resources
│ ├─error
│ ├─html
│ │ └─test
│ ├─mybatis
│ │ └─sql
│ └─snippet
└─test-classes我想把mybatis-conf.xml放在resources/mybatis下面,它有resources/mybatis的配置信息。
在SqlSessionFactoryManager类中,我编写了如下代码
String resource = System.getProperty("user.dir")
+ "/target/resources/mybatis/mybatis-conf.xml";
Reader reader = Resources.getResourceAsReader(resource);
if (sqlSessionFactory == null) {
sqlSessionFactory = new SqlSessionFactoryBuilder()
.build(reader);
}
...但是错误会发生。
d:\workspace\stocktalk-chat/target/resources/mybatis/mybatis-conf.xml :找不到资源java.io.IOException
当我尝试用绝对路径加载mybatis-conf.xml时,加载一个文件就可以了,很好。好吧..。现在我看到了另一个问题。
此错误可能存在于mybatis/sql/User.xml中。 原因: org.apache.ibatis.builder.BuilderException:解析SQL配置时出错。原因: java.io.IOException:未能找到资源myb提斯/sql/User.xml
为什么getResourceAsReader找不到我的信任文件?如何用相对路径加载mybatis-conf.xml?
发布于 2017-09-22 08:26:53
我认为在您的project.so中使用maven,当maven项目包( mvn包或mvn编译),如果您不配置构建元素,那么maven默认的类文件只能移动到target.So,如果您想要打包*.properties *.xml *.要针对目标文件,必须配置build元素下的资源元素,例如:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
</build>如果您查看该文件(mybati-config.xml)是您的路径,那么它实际上并不存在。
发布于 2021-04-13 18:49:36
我认为这将有助于审查Maven的工作方式。
您不应该在代码中引用target文件夹,因为maven使用这个文件夹来放置不同构建过程的结果和构建最终工件的阶段,并且很可能不会出现在最终部署环境中。理想情况下,您不需要手动修改这个文件夹。
现在,为了回答您的问题,mybatis配置和mapper配置文件通常被认为是代码和最终应用程序的一部分。这就是为什么它们被放置在resources文件夹中的原因,以便它们最终成为最终构建工件的一部分,并在应用程序最终部署时作为类路径的一部分。你应该通过类路径来访问它们。
下面是来自黑线莲网站的一个示例,说明如何读取mybatis的xml配置:
String resource = "org/mybatis/builder/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(inputStream);在您的例子中,第一行应该是:String resource = "mybatis/mybatis-conf.xml";
至于映射器位置,需要在mybatis-conf.xml中将其再次配置为类路径资源。
黑线莲网站中的示例(滚动到底部):
<!-- Using classpath relative resources -->
<mappers>
<mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
<mapper resource="org/mybatis/builder/BlogMapper.xml"/>
<mapper resource="org/mybatis/builder/PostMapper.xml"/>
</mappers>
<!-- Using url fully qualified paths -->
<mappers>
<mapper url="file:///var/mappers/AuthorMapper.xml"/>
<mapper url="file:///var/mappers/BlogMapper.xml"/>
<mapper url="file:///var/mappers/PostMapper.xml"/>
</mappers>
<!-- Using mapper interface classes -->
<mappers>
<mapper class="org.mybatis.builder.AuthorMapper"/>
<mapper class="org.mybatis.builder.BlogMapper"/>
<mapper class="org.mybatis.builder.PostMapper"/>
</mappers>
<!-- Register all interfaces in a package as mappers -->
<mappers>
<package name="org.mybatis.builder"/>
</mappers>因此,在您的情况下,如果您只使用xml,并且从您发布的消息中添加以下内容到您的mybatis-conf.xml中
<mappers>
<mapper resource="mybatis/sql/User.xml"/>
</mappers>发布于 2016-06-06 15:45:36
如果mybatis-conf.xml位于main/resources之下,那么在代码中您可以这样做,而不必担心物理路径:
new SqlSessionFactoryBuilder().build(super.getClass().getClassLoader().getResourceAsStream("mybatis-conf.xml")) mybatis-conf.xml会在类路径上找到。如果您确实希望在main/resources/mybatis下执行此操作,则可以:
new SqlSessionFactoryBuilder().build(super.getClass().getClassLoader().getResourceAsStream("mybatis/mybatis-conf.xml"))。
在运行Maven应用程序时,目标资源文件夹应该是类路径的一部分,因此不必指定资源。而且,您的User.xml应该存在于main/resources/mybatis/sql/User.xml下。
https://stackoverflow.com/questions/36762200
复制相似问题